uni-app cli NVUE VUE3 ios 12.5.5使用ref定义的变量无法响应[严重]

uni-app cli NVUE VUE3 ios 12.5.5使用ref定义的变量无法响应[严重]

示例代码:

const test = ref(3) test.value = 100


## 操作步骤:

如上示例。

## 预期结果:

在页面上test应该显示100

## 实际结果:

在页面上test显示的是3

## bug描述:

ios 12.5.5 iphone 6plus 使用ref定义的变量,在页面中无法响应修改。但在js中能监测到更改了。

手上的另一个手机iphone11 ios15没有问题。

你们上方的ios系统版本选项中,无法选择ios12.5.5

| 开发环境 | 版本号 | 项目创建方式 |
|----------|--------|--------------|
| PC       | win10  | CLI          |
| 手机     | iOS    |              |
| 手机     | iOS 12.4 |              |
| 手机     | 苹果   |              |
| 手机     | iphone 6plus |              |
| 页面类型 |        | nvue         |
| Vue      | vue3   |              |
| 打包方式 | 云端   |              |
| CLI      | 3.0.0-alpha-3041020220516002 |              |

更多关于uni-app cli NVUE VUE3 ios 12.5.5使用ref定义的变量无法响应[严重]的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

已上传demo:请进入页面后,点击bug3,页面中

更多关于uni-app cli NVUE VUE3 ios 12.5.5使用ref定义的变量无法响应[严重]的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-appcli 模式开发时,如果你在 NVUE 页面中使用 Vue 3ref 定义的变量无法响应,尤其是在 iOS 12.5.5 上出现这个问题,可能是由于以下几个原因导致的:

1. iOS 12.5.5 的兼容性问题

  • iOS 12.5.5 是一个较旧的系统版本,可能对 Vue 3 的某些特性支持不完全,尤其是 Proxy 对象(Vue 3 的响应式系统依赖于 Proxy)。
  • ProxyiOS 12 上的支持可能存在问题,导致 ref 定义的变量无法正常响应。

2. NVUE 页面的特殊性

  • NVUEuni-app 中的原生渲染引擎,它使用 Weex 作为底层技术。Weex 在某些情况下可能对 Vue 3 的响应式系统支持不完全。
  • NVUE 页面的渲染机制与 Vue 页面不同,可能会导致 ref 定义的变量无法正常响应。

3. Vue 3 的响应式系统问题

  • Vue 3 的响应式系统依赖于 Proxy,而 Proxy 在某些旧版浏览器或环境中可能无法正常工作。
  • 如果你在 NVUE 页面中使用 ref 定义的变量无法响应,可能是因为 Proxy 在该环境中无法正常工作。

解决方案

1. 使用 reactive 替代 ref

  • 如果 ref 无法正常工作,可以尝试使用 reactive 来定义响应式对象。reactive 在某些情况下可能比 ref 更稳定。
import { reactive } from 'vue';

const state = reactive({
  count: 0
});

2. 使用 Vue 2 的响应式系统

  • 如果 Vue 3 的响应式系统在 iOS 12.5.5 上无法正常工作,可以考虑回退到 Vue 2 的响应式系统。Vue 2 的响应式系统不依赖于 Proxy,因此在旧版浏览器中更稳定。
  • 你可以在 uni-app 中配置使用 Vue 2,而不是 Vue 3

3. 检查 NVUE 页面的兼容性

  • 确保 NVUE 页面的代码和 Vue 3 的响应式系统兼容。可以尝试在 Vue 页面中测试相同的代码,看看是否能够正常工作。
  • 如果 NVUE 页面确实存在问题,可以考虑使用 Vue 页面替代 NVUE 页面。

4. 升级 uni-app 和相关依赖

  • 确保你使用的是最新版本的 uni-app 和相关依赖。uni-app 团队可能会修复一些与 NVUEVue 3 相关的兼容性问题。

5. 使用 setTimeoutnextTick

  • 在某些情况下,ref 定义的变量可能需要通过 setTimeoutnextTick 来触发响应式更新。
import { ref, nextTick } from 'vue';

const count = ref(0);

nextTick(() => {
  count.value = 1;
});

6. 使用 Vue 2Vue.set 方法

  • 如果你必须使用 Vue 3,但遇到响应式问题,可以尝试使用 Vue 2Vue.set 方法来手动触发响应式更新。
import { set } from 'vue';

set(state, 'count', 1);
回到顶部