当前位置: 首页 > 知识库问答 >
问题:

javascript - vue3怎么写类似vue2中混入的代码?

薛飞星
2024-01-03
watch(() => store.isTranslate, (val) => {      console.log(val)      // queryData()    })

背景:
当isTranslate的值改变之后,调用页面的queryData方法,但是这段代码我要在多个vue页面中用,vue2写一个mixin.js直接mixin注入到当前页面就可以,vue3有啥办法

共有2个答案

曹浩淼
2024-01-03

建议把这个代码放到 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>
顾俊茂
2024-01-03

写成钩子函数呀,然后要用到地方引入即可:
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,求教各位老师。