renderjs中视图层与逻辑层数据传输坑点

在uni-app的学习过程中,发现renderjs的视图层与逻辑层数据传输存在一个问题:仅引用改变时不触发视图层更新。文章通过示例展示了当引用类型数据的值不变时,尽管创建了新引用,但视图层不会接收到更新。在app端,只有数据字符串值变化时才会更新,而h5端则没有此限制。作者提出,直接修改数组下标也无法将变更传递到renderjs。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

renderjs中视图层与逻辑层数据传输坑点

最近在学习使用uni-app的过程中发现了一个比较违反认知的情况。即renderjs通过逻辑层传递到视图层的数据在只是引用改变的时候不会触发视图层的接受方法。

示例如下

<template>
  <view>
    这是一个测试组件
        <button type="default" @click="changeTest"> 改变测试数据 </button>
        <view :renderChange="testData" :change:renderChange="testModule.testChange"></view>
  </view>
</template>

<script>
export default {
      data() {
    return {
      testData: [],
              count: 1
    };
  },
      methods: {
          changeTest() {
              this.count += 1
              this.testData = [1]
              console.log('change test');
          }
      }
};
</script>

<script lang="renderjs" module="testModule">
    export default {
        methods: {
            testChange(val) {
                console.log(JSON.stringify(val))
                alert(JSON.stringify(val));
            }
        }
    }
    
</script>

按照官方的示例逻辑层向视图层可以通过以上方式来传递参数, 当逻辑层中的testData发生改变时就会将新的值传递到视图层中。问题就出在发生改变后会传递数据到视图层。

在js中数据分为了基础数据类型和引用数据类型,对于引用类型的数据来说,改变其引用才能叫做改变了这个数据的值。而在uni-app中向renderjs传值的过程中,如果改变引用前后这个值转为字符串的值并没有发生改变,这个新的值是不会传递到视图层的。正如上方的测试程序,在第一次执行的时候testData改变为一个新的数组,并且包含一个数字1,视图层可以得到这次数据更新。而后再次点击,虽然每次testData都会获得一个新的数组引用,但是却不会将引用的变化反馈到视图层。

在这里插入图片描述

如上图所示日志显示只有第一次的数据传递到了视图层此问题在app端必定会出现,那么在h5端呢?

在这里插入图片描述

从日志中可以发现在h5端的时候是没有这个现象的,每一次数据引用的改变都会传递到renderjs中。当然在h5端事实上是不存在视图层,逻辑层的关系的。h5端中的renderjs只是使用mixins将renderjs模块合并进入了主模块。

思考

那么现在想想如果是直接通过数据下标来改变数组中的值是否可以传递到renderjs中呢?
答案是不能的,无论是在app端亦或是在h5端都不会因为直接通过下标改变了数组中的值而传递这次改变到主模块儿中。感兴趣可以自己尝试,验证一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值