watch(() => store.isTranslate, (val) => {
console.log(val)
// queryData()
})
背景:
当isTranslate的值改变之后,调用页面的queryData方法,但是这段代码我要在多个vue页面中用,vue2写一个mixin.js直接mixin注入到当前页面就可以,vue3有啥办法
watch(() => store.isTranslate, (val) => {
console.log(val)
// queryData()
})
背景:
当isTranslate的值改变之后,调用页面的queryData方法,但是这段代码我要在多个vue页面中用,vue2写一个mixin.js直接mixin注入到当前页面就可以,vue3有啥办法
建议把这个代码放到 store 里面,然后在多个组件里共用这个数据。会比组件 watch 然后更新更好。
比如 store.ts:
export const useStore = defineStore('store', () => {
const isTranslated = ref<boolean>(false);
const effectedData = ref<SomeData[]>([]);
function setIsTranslated(value: boolean): void {
isTranslated.value = value;
}
watch(isTranslated, () => {
// load effected data
});
return {
isTranslated,
effectedData,
setIsTranslated,
};
});
某个组件 comp.vue
<script lang="ts" setup>
const store = useStore();
function toggleIsTranslated(): void {
store.setIsTranslated(store.isTranslated);
}
</script>
<template>
<div class="formatted-data">{{store.effectedData}}</div>
<button
type="button"
@click="toggleIsTranslated"
>Toggle</button>
</template>
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
3 回答4.2k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
写成钩子函数呀,然后要用到地方引入即可:
useTranslateWatch.js:
要用到的地方: