小程序的代码跑在两个线程里:视图层是各平台自研的渲染环境,逻辑层是独立的 JS 引擎,两者通过 JSBridge 通信。语法上像 HTML/CSS/JS 的方言——标签是 view、text、image,样式类 CSS 但选择器受限,JS 里没有 DOM/BOM,一切操作走数据绑定与 setData。
开发时最需要适应的是 setData 的异步与开销:每次都跨线程序列化数据,高频调用会卡顿,所以要把多次合并、只传变化的字段。此外各平台语法互不兼容,跨端可借助 Taro、uni-app 这类编译型框架,但都会牺牲一部分平台原生能力。
// 小程序的数据驱动写法(微信小程序示意) // index.js Page({ data: { count: 0, list: [] }, onTap: function () { // 错误写法:this.data.count++; 视图不会更新 // 正确写法:用 setData 传变化的字段,框架比对后渲染 this.setData({ count: this.data.count + 1 }); }, onLoad: function () { var that = this; wx.request({ url: 'https://api.example.com/list', success: function (res) { that.setData({ list: res.data }); } }); } }); // index.wxml:<view bindtap="onTap">{{count}}</view> // 列表:<view wx:for="{{list}}" wx:key="id">{{item.name}}</view>