| 分类 mini  | 标签 小程序  数据绑定 

title

引言

小程序采用数据驱动的视图更新模式。逻辑层通过 this.setData() 修改 data,视图层自动更新。这种单向数据流的设计使得状态变化可追踪,便于调试和维护。事件通过 bindcatch 绑定在 WXML 中,事件对象可携带自定义数据(通过 data-* 属性),实现视图到逻辑的反馈。

理解数据流和事件机制是开发交互逻辑的基础。需要注意的是,直接修改 this.data.xxx 不会触发视图更新,必须通过 setData;且 setData 是异步的,在 setData 回调之后才能拿到更新后的 data。

setData 使用

setData 将数据从逻辑层传到视图层,触发 WXML 重新渲染。传入的对象会与当前 data 做浅合并,支持路径写法(如 'list[0].name': 'xxx')更新嵌套数据。

Page({
  data: { count: 0 },
  increment() {
    this.setData({ count: this.data.count + 1 });
  }
});

性能建议: setData 会触发逻辑层与视图层的通信,频繁调用会影响性能。应尽量合并多次更新为一次,避免在循环中多次调用。同时,不要传递过大的数据(如长列表),只传递变化的部分即可。单次 setData 数据量建议不超过 1MB。

事件绑定

事件绑定使用 bindcatch 前缀加事件类型,如 bindtapcatchtapbind 会冒泡,即事件会向父节点传递;catch 会阻止冒泡,事件不会继续向上传递。根据业务需要选择:若子节点需要单独处理点击且不希望触发父节点逻辑,使用 catch

<view bindtap="onTap">点击</view>
<view catchtap="onTap">阻止冒泡</view>

事件对象 e 包含 type(事件类型)、target(触发事件的元素)、currentTarget(绑定事件的元素)、detail(组件自定义数据)等。在列表渲染中,常需要知道点击的是哪一项,可通过 data-* 传递自定义数据。注意:data- 后的属性名会转为小写,驼峰会变成短横线,如 data-userIddataset 中为 userId

<view data-id="" bindtap="onItemTap"></view>
onItemTap(e) {
  const id = e.currentTarget.dataset.id;
}

双向绑定

input、textarea、picker 等组件支持 model:value 实现双向绑定(基础库 2.9.3+)。无需手动监听 bindinputsetData,框架会自动同步数据到 data 中。适合表单输入场景,可简化代码。

<input model:value="" placeholder="请输入"/>

总结

数据绑定与事件处理是小程序交互的核心。合理使用 setData、合并更新、控制数据量、利用 data-* 传参,可写出高效且易维护的代码。建议在复杂交互中先梳理数据流,再编写绑定和事件逻辑。


上一篇     下一篇