• vue3实现响应式provide、inject


    实现响应式provide、inject主要目的就是代替vuex,本人并不喜欢vuex,感觉比较繁琐,理解不容易,每次封装都要去官网看api和一些大神的文章。

    刚好vue3中不建议使用vuex,提倡provide、inject,借此更是让我离vuex又远了一步。

    provide、inject:

    我们先简单的使用provide、inject

    //如果是为了替代vuex,那么最好是在app.vue中进行声明 import { defineComponent,provide } from "vue"; export default defineComponent({ setup(){ //此处定义了一个provide变量nameTest provide('nameTest','testName') return{ } } }); //app.vue子以及更下级组件 import { defineComponent,inject} from "vue"; 需要注意的是inject只能在setup中使用,promise.then()中也是不可以使用的 export default defineComponent({ setup(){ //此处使用inject获取nameTest let nameTest = inject('nameTest') return{ nameTest } } });

     响应式:

    app.vue改为:
    let testName = ref('555555');//这里可以使用ref或者是reactive使其为一个响应式
    provide('nameTest',testName);//这里不能使用testName.value,不然inject监听不到
    //另外如果需要全局改变nameTest,还需要定义一个方法来进行处理,类似于vuex的mutation
    provide('nameChangeTest',(data)=>{//此处可以接受参数,也可以不接受参数
          testName.value = data
    })
    
    app.vue子以及更下级组件没有变化,还是按照原来的
    如果需要改变数据:
    let nameChangeTest = inject('nameChangeTest')
    
    nameChangeTest('8888888888');
    

    另外provide的定义并不能使用数据或者是对象进行多个的组合式的写法,只能一个个的写,如果真的需要组合式写法,可以尝试使用函数定义多个变量的方法。

  • 相关阅读:
    CSS的z-index(分层)
    CSS的position(位置)
    HTML-答案检查&按钮倒计时
    HTML-字体逐渐显示
    2012 VS密钥
    游戏的轻度、中度、重度是什么意思
    PHP Date()函数详细参数
    服务器被黑之后的处理经历
    SEO
    ps切图步骤
  • 原文地址:https://www.cnblogs.com/sixrookie/p/16066476.html
Copyright © 2020-2023  润新知