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>
写成钩子函数呀,然后要用到地方引入即可:
useTranslateWatch.js:
import { ref, watch } from 'vue';export default function useTranslateWatch(isTranslateRef, queryData) { // 假设isTranslateRef是从store中导出的ref或reactive对象属性 watch(isTranslateRef, (val) => { console.log(val); // 当isTranslate的值改变时调用queryData方法 queryData(); });}
要用到的地方:
<script setup>import { ref } from 'vue';import { useStore } from 'vuex'; // 假设你正在使用Vueximport useTranslateWatch from '@/composables/useTranslateWatch';const store = useStore();// 假设isTranslate是store中的stateconst isTranslate = ref(store.state.isTranslate);// 这是你的queryData方法function queryData() { // ...你的查询逻辑}// 使用自定义的Composition函数useTranslateWatch(isTranslate, queryData);</script>
这段代码在vue2下不会报错,但是在vue3中 slot的写法变成了v-slot,由于我刚学不久还不会改写求帮忙改写一下。整体的vue文件就是elementui拉下来的一个登录
主要内容:实例,选项合并,实例,实例,全局混入,实例混入 (mixins)定义了一部分可复用的方法或者计算属性。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。 来看一个简单的实例: 实例 // 定义混入对象 const myMixin = { created() { this.hello() }, methods: { hello() { console.log('欢迎来到混入实例-RUNOOB!'
现在从接口获取回一个对象result,它的属性和data是一样的,我要怎么把reasult值赋值给data以达到响应式? 这种可以吗?还是要先解构,再赋值给data,或者是用...这种,或者Object.assign()这种?
现在做的是动态编辑菜单 我想给这个菜单添加svg代码用作图标,但是我发现动态添加的svg代码是不会被识别的。 (Icon是自己封装的) 静态的svg代码就可以被识别 动态的就原样的打印出来了
vue2我这样写没问题,vue3,js版我改怎么写。
将下面的js版的props,改成ts版: vue的 ts的 但是上面这样写报错。 初次使用ts,求教各位老师。