• 技术文章 >web前端 >前端问答

    vue组件中data不能是函数吗

    青灯夜游青灯夜游2022-12-19 17:22:07原创154

    不是,vue组件中data必须是一个函数。vue中组件是用来复用的,为了防止data复用,将其定义为函数。vue组件中的data数据都应该是相互隔离,互不影响的,组件每复用一次,data数据就应该被复制一次,之后,当某一处复用的地方组件内data数据被改变时,其他复用地方组件的data数据不受影响,就需要通过data函数返回一个对象作为组件的状态。

    本教程操作环境:windows7系统、vue3版,DELL G3电脑。

    vue实例的时候定义data属性既可以是一个对象,也可以是一个函数

    const app = new Vue({
        el:"#app",
        // 对象格式
        data:{
            foo:"foo"
        },
        // 函数格式
        data(){
            return {
                 foo:"foo"
            }
        }
    })

    但,组件中定义data属性,只能是一个函数

    如果为组件data直接定义为一个对象

    Vue.component('component1',{
        template:`<div>组件</div>`,
        data:{
            foo:"foo"
        }
    })

    则会得到警告信息

    1.png

    警告说明:返回的data应该是一个函数在每一个组件实例中

    为什么data属性是一个函数而不是一个对象?

    Vue组件中data属性不能为对象原因是对象是引用类型,组件会被多个实例同时引用导致的结果就是多个实例共享一个对象,其中一个组件改变了data对象中的值,其他实例也会受到影响。

    如图所示,组件复用后,随机点击其中一个组件中的按钮其他两个组件的数值也会受到影响

    2.gif

    vue组件data为函数的原因:data为函数,通过return返回对象,可以实现每个实例都有自己独立的对象,实例之间互不影响;如下图所示

    3.gif

    结论

    根实例对象data可以是对象也可以是函数(根实例是单例),不会产生数据污染情况

    组件实例对象data必须为函数,目的是为了防止多个组件实例对象之间共用一个data,产生数据污染。采用函数的形式,initData时会将其作为工厂函数都会返回全新data对象

    说明:

    (学习视频分享:web前端开发编程基础视频

    以上就是vue组件中data不能是函数吗的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:data Vue 组件
    上一篇:vue运用了哪些模式 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 移动web开发能用vue吗• vue中组件化和模块化有什么区别• vue的混入可以使用生命周期吗• vue3.0支持服务端渲染吗• vue项目只有一个vue实例么
    1/1

    PHP中文网