在uni-app中,如果data中的对象属性改变了,但是页面没有相应更新的情况,通常有以下几点需要注意:

这篇具有很好参考价值的文章主要介绍了在uni-app中,如果data中的对象属性改变了,但是页面没有相应更新的情况,通常有以下几点需要注意:。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 使用this.$set更新对象属性直接修改对象属性是无法触发页面更新的,需要使用this.$set方法:

this.$set(this.obj, 'key', value)

2. 确保数据层级不太深如果对象层级过深,改变内层属性也可能无法触发更新。建议关键数据不要超过2层。

3. 使用深度 watcher可以在watch中用深度watcher的方式监听整个对象的变化:

watch: {
  obj: {
    handler(newVal) {
      // 对象改变响应逻辑
    },
    deep: true
  } 
}

4. 使用计算属性有些场景可以通过计算属性来响应对象属性变化。

5. 检查是否多次修改同一属性连续多次修改同一属性不会触发多次更新。

注意:

比较推荐的做法是:

  1.  默认使用 this.$set 更新对象属性this.$set 是 uni-app 提供的接口,可以显式触发属性改变的响应。使用简单,也相对直观,所以在大多数场景下都是比较好的选择。
  2.  对于层级较深的对象,可以配合深度 watcher 使用如果数据层级很深,只使用 this.$set 可能仍然无法触发更新,这时候可以额外使用 deep watcher 来完整监听对象变化。
  3. 根据需要使用计算属性计算属性可以将依赖的对象属性转换为一个响应式的计算值,在某些场景下可以简化逻辑。
  4.  尽量保持数据层级不要太深这是从根本上减少响应问题的方法。业务数据层级不要超过 3 层。

所以,综合来说: 

  • 默认使用 this.$set 更新对象属性
  • 配合深度 watcher 监听深层级对象变化
  • 根据实际需求适当使用计算属性
  • 保持数据尽量扁平这样可以比较全面地处理对象属性更新页面不响应的问题

eg:

1、使用this.$set更新对象属性

this.$set(this.itemData, 'likeNum', result.length)

2、在watch中用深度watcher的方式文章来源地址https://www.toymoban.com/news/detail-587105.html

					js
					// data中定义对象
					data() {
					  return {
						user: {
						  name: 'John',
						  age: 20
						}
					  }
					}
					
					// 深度watch监听对象所有属性变化
					watch: {
					  user: {
						handler(val, oldVal) {
						  // 对象被改变时响应
						},
						deep: true
					  }
					}
					
					// 后续修改对象属性都会触发handler函数
					this.user.name = 'Tom' 
					this.user.age = 22

到了这里,关于在uni-app中,如果data中的对象属性改变了,但是页面没有相应更新的情况,通常有以下几点需要注意:的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app——使用uni.navigateTo传递对象参数

    文章目录 一、 传递一般参数 二、 传递对象参数 1. 传递参数 2. 接收参数 navigateTo进行页面传递参数,在下一个页面接收数据,一般在在onLoad钩子函数中获取

    2024年02月13日
    浏览(55)
  • uni-app -- - - - 小程序如何向后端发送Form Data格式的数据

    接口请 求方式 传参方式 ,肯定不是一成不变的,当遇到如题需求的时候,要知道, 小程序是没有FormData对象 的,那么该怎么操作呢??? 直接上代码: 效果如图: 如上所示,这样写起来功能实现了,但是看起来这代码太不美观了 效果如图: 参考文章: 使用wx.request发送

    2024年02月08日
    浏览(28)
  • uni-app开发使用uni-ui组件uni-data-checkbox编译微信小程序报错

    uniapp开发使用uni-ui控件uni-data-checkbox,编译成微信小程序报错VM50 WAService.js:1 TypeError: Cannot read property \\\'length\\\' of undefined,并且页面无法显示。  解决方法: 1、 HBuilder X 编译器下载 sass 或更新 HBuilder X 版本 2、更新uni-ui组件库 3、如果不使用uniCloud就注释uni-data-checkbox.vue文件中的

    2024年02月06日
    浏览(47)
  • uni-app中的uni.requireNativePlugin()

    这个方法是用来引入原生插件的方法,自 HBuilderX 1.4 版本起,uni-app 支持引入原生插件,使用方式如下: 引入插件的类型有三种: 内置原生插件:         内置原生插件,uni-app已默认集成,支持直接在内置基座运行。         仅在nvue页面,支持引入BindingX,animation,

    2024年02月16日
    浏览(30)
  • uniapp小程序:追加数组中的对象属性,属性数据已经添加,视图不会改变

    场景复现: 由于业务需要,需要给数组中的每一个对象添加一个ischecked属性(Boolean)来控制复选框的选中状态,于是: 注意:buycargoodslists为数据源,初始数据源没有定义isChecked属性 结果可想而知,在控制台查看操作后的数据源buycargoodslists:确实属性isCheck已经插进去了,但

    2024年02月12日
    浏览(26)
  • Uni-App 中使用微信小程序开发,你可以通过以下步骤来设置节点属性

    在 Uni-App 中使用微信小程序开发,你可以通过以下步骤来设置节点属性: 在模板中定义节点:在 wxml 文件中,使用标签定义要操作的节点,并为它添加一个唯一的 id 属性,例如:   在 js 文件中获取节点的引用:使用  uni.createSelectorQuery()  方法创建选择器查询对象,并使用

    2024年02月15日
    浏览(27)
  • uni-app:对数组对象进行以具体某一项的分类处理

    这里定义为五个数组,种类product有aaa,bbb两种 原始数据在data中进行定义 注:使用了数组的 reduce() 方法来对 devices 数组进行循环遍历,并根据每个设备对象中的 product 值将其分类到一个以 product 为名称的数组中。 reduce() 方法接收一个回调函数和一个初始值作为参数。在这里,

    2024年02月07日
    浏览(36)
  • uView 在 uni-app 中的使用

    提示:正文内容: uView 官网: https://www.uviewui.com uView 是 uni-app 生态专用的 UI 框架 关于uView的取名来由,首字母u来自于uni-app首字母,uni-app是基于Vue.js,Vue和View(延伸为UI、视图之意)同音,同时view组件是uni-app中 最基础,最重要的组件,故取名uView,表达源于uni-app和Vue之意,

    2024年02月15日
    浏览(33)
  • uni-app商城中的搜索功能

     一、效果图 二、代码 首先由首页顶部的搜索跳转到真正的搜索页面,输入内容后回车即可完成搜索(假数据,无请求数据 )  ① 首页布局 ② 搜索页面布局 ③ 商品列表页布局  

    2024年02月12日
    浏览(39)
  • 【uni-app】textarea中的换行问题

    关于textarea要注意的是,在微信小程序,百度小程序及字节跳动小程序中,textarea是原生组件,层级高于前端组件,请勿在scroll-view,swiper,picker-view,movable-view中使用textarea组件,覆盖textarea需要使用cover-view 在实际开发中,textarea组件中的换行符为 rn ,并不是HTML的 /br 标签。

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包