项目中遇到,通过navigateTo跳转新页面,通过EventChannel,acceptDataFromOpenerPage,获取到数据。
在新页面中setData数据、修改数据,返回老页面,再回到新页面,数据竟然是上次setData改变过的数据,而不是老页面原有的数据。
说明通过EventChannel传递的数据是引用类型数据。
解决办法是在新页面获取到数据后,深拷贝数据,再setData,处理修改数据。这样保持独立,不会污染老页面的数据。
通过EventChannel页面传递数据是引用类型
项目中遇到,通过navigateTo跳转新页面,通过EventChannel,acceptDataFromOpenerPage,获取到数据。
在新页面中setData数据、修改数据,返回老页面,再回到新页面,数据竟然是上次setData改变过的数据,而不是老页面原有的数据。
说明通过EventChannel传递的数据是引用类型数据。
解决办法是在新页面获取到数据后,深拷贝数据,再setData,处理修改数据。这样保持独立,不会污染老页面的数据。
2 个评论
验证过了,就如作者所言。其实还是基础知识,js基本类型是值传递,对象是共享传递,直接修改对象不会对原对象造成影响,但是修改对象的属性时会影响到原对象。因为对象传递本质上传的是地址,直接通过赋值修改对象就是将对象重新指向了新的地址,而修改对象的属性时地址并没有发生改变。
真的?感觉不太可能