provide/inject @vue/composition-api 没有更新
provide/inject @vue/composition-api not updating
请注意,我使用的不是 vue 3,而是 @vue/composition-api vue 2。
我的路由器有以下配置:
{
path: `/:country(${
Object.keys(config.countries).join('|')
})?/:locale(${
Object.keys(config.languages).join('|')
})?`,
props:true,
component: Root,
我的根组件有:
setup(props) {
const loc=ref(props.locale);
watch(()=>props.locale,
(current)=>{
// eslint-disable-next-line no-console
console.log('in root watch',current);
loc.value=current
}
)
provide('locale', loc);
},
当更改路由时,我确实收到日志说它已更改但是在我使用注入的任何组件中它都没有更新:
setup(){
const locale = inject('locale')
console.log('locale from inject:',locale.value)
watch(
() => locale,
(...args)=>{
//never logs
console.log('args:',args)
}
);
},
我watch用错了,在child我应该做的:
setup(){
const locale = inject('locale')
watch(
locale,//not a function but an observable
(...args)=>{
//works
console.log('args:',args)
}
);
},
请注意,我使用的不是 vue 3,而是 @vue/composition-api vue 2。
我的路由器有以下配置:
{
path: `/:country(${
Object.keys(config.countries).join('|')
})?/:locale(${
Object.keys(config.languages).join('|')
})?`,
props:true,
component: Root,
我的根组件有:
setup(props) {
const loc=ref(props.locale);
watch(()=>props.locale,
(current)=>{
// eslint-disable-next-line no-console
console.log('in root watch',current);
loc.value=current
}
)
provide('locale', loc);
},
当更改路由时,我确实收到日志说它已更改但是在我使用注入的任何组件中它都没有更新:
setup(){
const locale = inject('locale')
console.log('locale from inject:',locale.value)
watch(
() => locale,
(...args)=>{
//never logs
console.log('args:',args)
}
);
},
我watch用错了,在child我应该做的:
setup(){
const locale = inject('locale')
watch(
locale,//not a function but an observable
(...args)=>{
//works
console.log('args:',args)
}
);
},