uni-app vue3使用renderjs在app端获取不到数据是为什么

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app vue3使用renderjs在app端获取不到数据是为什么

开发环境 版本号 项目创建方式
Windows win11 HBuilderX

示例代码:

<template>  
    <view :prop="test" id="echarts"></view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                test: 123,  
            }  
        },  
        methods: {  
        }  
    }  
</script>  
<script module="echarts" lang="renderjs">  
    export default {  
        mounted() {  
            console.log(555, this.test)  
        },  
        methods: {  

        }  
    }  
</script>  

操作步骤:

如代码示例

预期结果:

正常打印出值

实际结果:

打印的值为undefined

bug描述:

vue3使用renderjs在app端获取不到数据是为什么,在h5端可以正常获取数据,app端就不行了


3 回复

这么用
<view :prop="test" id="echarts" :prop="test" :change:prop="handleAction"></view>

renderjs中
handleAction(newValue, oldValue, ownerInstance, instance) {

        },<br>

好的,明白啦,谢谢

uni-app 中使用 Vue 3 和 renderjs 时,如果在 App 端获取不到数据,可能是由于多种原因导致的。renderjs 是在小程序端增强页面渲染性能的一种技术,它允许在原生渲染层执行 JavaScript 代码,但其行为与普通的 Vue 组件或页面脚本有所不同。以下是一些可能的原因和相关的代码示例,帮助你排查问题。

1. 数据同步问题

renderjs 与 Vue 组件之间的数据同步不是自动的,需要通过特定的 API 来实现。确保你使用了正确的数据同步方法。

示例代码

在 Vue 组件中:

<template>
  <view>
    <text>{{ message }}</text>
  </view>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello from Vue'
    };
  },
  mounted() {
    this.$mp.page.setData({
      renderData: this.message
    });
  },
  watch: {
    message(newVal) {
      this.$mp.page.setData({
        renderData: newVal
      });
    }
  }
};
</script>

renderjs 中:

// #ifdef MP-WEIXIN || MP-ALIPAY || ... (其他小程序平台)
Page({
  data: {
    renderData: ''
  },
  onLoad() {
    // 初始化时可以从 Vue 组件获取数据,但通常 Vue 组件会主动同步数据到这里
  },
  methods: {
    syncDataFromVue(e) {
      // 这个方法通常由 Vue 组件触发,用于更新 renderjs 中的数据
      this.setData({
        renderData: e.detail.data
      });
    }
  }
});
// #endif

2. 条件编译问题

确保你的 renderjs 代码被正确地条件编译到目标平台(如微信小程序)。

示例代码

// #ifdef MP-WEIXIN
// renderjs 代码
// #endif

3. 生命周期问题

renderjs 的生命周期与 Vue 组件的生命周期不完全一致,确保在正确的时机进行数据同步。

4. 权限或配置问题

检查是否有相关的权限或配置限制了数据的访问。

5. 调试与日志

使用开发者工具的调试功能,查看控制台是否有错误信息,或者数据是否被正确设置和获取。

结论

由于 renderjs 的特殊性,确保你理解了它的工作原理和数据同步机制。如果上述方法仍然无法解决问题,建议检查具体的平台文档或寻求社区的帮助,因为不同平台(如微信小程序、支付宝小程序等)可能会有细微的差异。

回到顶部