diff --git a/packages/shineout-style/src/jss-style/index.tsx b/packages/shineout-style/src/jss-style/index.tsx index 46ad489d7..fb874f20c 100644 --- a/packages/shineout-style/src/jss-style/index.tsx +++ b/packages/shineout-style/src/jss-style/index.tsx @@ -14,15 +14,22 @@ export const setJssConfig = (newConfig: { generateId?: GenerateId }) => { Object.assign(config, newConfig); }; +const hashCache: Record = {}; const stringToHash = (str: string) => { - let hash = 0; + if (hashCache[str]) { + return hashCache[str]; + } + + let hash = BigInt(0); if (str.length === 0) return ''; for (let i = 0; i < str.length; i += 1) { - const char = str.charCodeAt(i); - hash = (hash << 5) - hash + char; - hash |= 0; + const char = BigInt(str.charCodeAt(i)); + hash = (hash << BigInt(5)) - hash + char; + hash &= BigInt('0xFFFFFFFFFFFFFFFF'); // 限制在64位整数范围内 } - return 'c' + hash.toString(36); + const result = 'c' + hash.toString(36); + hashCache[str] = result; + return result; }; const camelToDash = (str: string) => str.replace(/([A-Z])/g, '-$1').toLowerCase(); diff --git a/packages/shineout/src/button/__example__/s-001-base.tsx b/packages/shineout/src/button/__example__/s-001-base.tsx index 4db07f567..97672f3e7 100644 --- a/packages/shineout/src/button/__example__/s-001-base.tsx +++ b/packages/shineout/src/button/__example__/s-001-base.tsx @@ -13,7 +13,7 @@ export default () => { return (
- diff --git a/packages/shineout/src/button/__test__/__snapshots__/button.spec.tsx.snap b/packages/shineout/src/button/__test__/__snapshots__/button.spec.tsx.snap index ad52de547..98e53b2d1 100644 --- a/packages/shineout/src/button/__test__/__snapshots__/button.spec.tsx.snap +++ b/packages/shineout/src/button/__test__/__snapshots__/button.spec.tsx.snap @@ -5,7 +5,7 @@ exports[`Button[Base] should render correctly 1`] = ` style="display: flex; gap: 24px; flex-wrap: wrap;" >