V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
BruceXu
V2EX  ›  Vue.js

在 data 属性外部定义的变量,到底是单个组件实例内部独享还是多个组件实例共享?

  •  
  •   BruceXu · May 19, 2023 · 2123 views
    This topic created in 1080 days ago, the information mentioned may be changed or developed.
    <script>
    	let a = "";
    	export default {
    		data() {
    			return {
    				b: ""
    			};
    		},
    
    
    	};
    </script>
    

    代码如上图所示.环境是 vue2.

    因为一些性能和循环引用问题.想把某些变量放在 data 外面.但是这个组件本身在页面上是多实例的.

    不知是实例内部独享还是多个实例共享呢?

    个人理解:组件似乎在打包过程中变成闭包了?应该是每个实例各自隔离吧?

    6 replies    2023-05-22 14:42:13 +08:00
    coyoteer
        1
    coyoteer  
       May 19, 2023
    我试验了一下是共享的
    wu67
        2
    wu67  
       May 19, 2023
    闭包是值的跨作用域传递...
    ChefIsAwesome
        3
    ChefIsAwesome  
       May 19, 2023
    你那个 export 的玩意是工厂函数,拿来造组件实例的,不是实例本身啊。
    daliusu
        4
    daliusu  
       May 19, 2023
    你这跟 vue 半毛钱关系没有把,你把一个对象放在 data 外边,data 是每次实例创建的时候调用一下 return 一个新的对象,但是这个对象内部一些属性引用的不还是你外边的对象吗?如果不想,你可以 deepclone 一下,或者把这个外部对象也改写成调用函数获取的形式,const getData = () => ({x:1})
    BruceXu
        5
    BruceXu  
    OP
       May 22, 2023
    懂了!醍醐灌顶!感谢各位解惑!
    BruceXu
        6
    BruceXu  
    OP
       May 22, 2023
    那如果不需要加入响应式,但又每个实例隔离的话,怎么写呢?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1091 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 23:56 · PVG 07:56 · LAX 16:56 · JFK 19:56
    ♥ Do have faith in what you're doing.