Skip to content

Commit a9198e4

Browse files
committed
fix: theme reactive not work #7180
1 parent 509ec68 commit a9198e4

File tree

1 file changed

+30
-16
lines changed

1 file changed

+30
-16
lines changed

Diff for: components/theme/internal.ts

+30-16
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,16 @@ import statisticToken, { merge as mergeToken, statistic } from './util/statistic
2121
import type { VueNode } from '../_util/type';
2222
import { objectType } from '../_util/type';
2323
import type { ComputedRef, InjectionKey, Ref } from 'vue';
24-
import { unref, defineComponent, provide, computed, inject, watchEffect, ref } from 'vue';
25-
import { toReactive } from '../_util/toReactive';
24+
import {
25+
triggerRef,
26+
unref,
27+
defineComponent,
28+
provide,
29+
computed,
30+
inject,
31+
watch,
32+
shallowRef,
33+
} from 'vue';
2634

2735
const defaultTheme = createTheme(defaultDerivative);
2836

@@ -64,13 +72,18 @@ export interface DesignTokenContext {
6472
const DesignTokenContextKey: InjectionKey<ComputedRef<DesignTokenContext>> =
6573
Symbol('DesignTokenContext');
6674

67-
export const globalDesignTokenApi = ref<DesignTokenContext>();
75+
export const globalDesignTokenApi = shallowRef<DesignTokenContext>();
6876

6977
export const useDesignTokenProvider = (value: ComputedRef<DesignTokenContext>) => {
7078
provide(DesignTokenContextKey, value);
71-
watchEffect(() => {
72-
globalDesignTokenApi.value = toReactive(value);
73-
});
79+
watch(
80+
value,
81+
() => {
82+
globalDesignTokenApi.value = unref(value);
83+
triggerRef(globalDesignTokenApi);
84+
},
85+
{ immediate: true, deep: true },
86+
);
7487
};
7588

7689
export const useDesignTokenInject = () => {
@@ -96,31 +109,32 @@ export function useToken(): [
96109
ComputedRef<GlobalToken>,
97110
ComputedRef<string>,
98111
] {
99-
const designTokenContext = unref(
100-
inject<ComputedRef<DesignTokenContext>>(
101-
DesignTokenContextKey,
102-
computed(() => globalDesignTokenApi.value || defaultConfig),
103-
),
112+
const designTokenContext = inject<ComputedRef<DesignTokenContext>>(
113+
DesignTokenContextKey,
114+
computed(() => globalDesignTokenApi.value || defaultConfig),
104115
);
105116

106-
const salt = computed(() => `${version}-${designTokenContext.hashed || ''}`);
117+
const salt = computed(() => `${version}-${designTokenContext.value.hashed || ''}`);
107118

108-
const mergedTheme = computed(() => designTokenContext.theme || defaultTheme);
119+
const mergedTheme = computed(() => designTokenContext.value.theme || defaultTheme);
109120

110121
const cacheToken = useCacheToken<GlobalToken, SeedToken>(
111122
mergedTheme,
112-
computed(() => [defaultSeedToken, designTokenContext.token]),
123+
computed(() => [defaultSeedToken, designTokenContext.value.token]),
113124
computed(() => ({
114125
salt: salt.value,
115-
override: { override: designTokenContext.token, ...designTokenContext.components },
126+
override: {
127+
override: designTokenContext.value.token,
128+
...designTokenContext.value.components,
129+
},
116130
formatToken,
117131
})),
118132
);
119133

120134
return [
121135
mergedTheme,
122136
computed(() => cacheToken.value[0]),
123-
computed(() => (designTokenContext.hashed ? cacheToken.value[1] : '')),
137+
computed(() => (designTokenContext.value.hashed ? cacheToken.value[1] : '')),
124138
];
125139
}
126140

0 commit comments

Comments
 (0)