页面的三件套
网页里 AI 怎么写你不用管。小程序有一个你必须知道的规矩,否则你看不懂它为什么「改了没反应」:
- 页面的数据放在 data 里。
- 改数据必须用 setData,界面才会跟着变。直接改 this.data.todos 界面纹丝不动。
- 要刷新后还在,用 wx.setStorageSync('todos', list) 存,启动时 wx.getStorageSync('todos') 读。
Page({
data: { todos: [] },
onLoad() {
this.setData({ todos: wx.getStorageSync('todos') || [] });
},
addTodo(e) {
const todos = [...this.data.todos, { text: e.detail.value, done: false }];
this.setData({ todos }); // 界面更新
wx.setStorageSync('todos', todos); // 本地保存
},
});验收标准,换成小程序版
第 2 课那份验收标准几乎能直接用,只改两处:
把待办清单完整做进 pages/index。
验收标准:
1. 输入框输入后点「添加」,列表多一条
2. 点一条切换完成状态,完成的划掉
3. 每条右侧有删除,删除后列表和本地存储里都没了
4. 关掉小程序再打开(模拟器点「编译」),数据还在 ← 原来是「刷新页面」
5. 列表为空时显示「还没有待办」
约束:只改 pages/index 四个文件,不新增页面,不引入组件库。 ← 原来是「只用一个 html」自测 · 学完检查一下
想真正动手做题、记进度、攒连胜?到互动课里练。
AI 写了 this.data.todos.push(newItem),控制台里数组确实多了一条,但页面列表没变。原因是?
答案:没有用 setData,小程序只在 setData 时才刷新界面
这是小程序和网页最不一样的一条:数据变了不等于界面变了,setData 才是「通知界面刷新」的动作。push 能用,重启无关,本地存储管的是刷新后还在不在,不管当前显示。
判断:用了 setData 之后数据就自动保存到手机本地了,关掉小程序再打开还在。
答案:错
setData 只管当前界面显示,小程序关掉数据就没了。要下次打开还在,必须另外调 wx.setStorageSync 存、启动时 getStorageSync 读。两件事,两个动作。
把网页版验收标准改成小程序版时,「刷新页面后数据还在」这一条应该改成?
答案:「关掉小程序再打开(或在开发者工具重新编译),数据还在」
小程序没有「刷新页面」这个动作,对应的用户行为是关掉再打开。这一条不能删,它验的是本地存储有没有生效。「重装后还在」是云端同步的要求,那是第 4 课的事。
AI 做完后,你在模拟器里添加了两条待办,点「编译」重新加载,列表空了。按验收标准,你发回去的应该是?
答案:「验收第 4 条没过:添加两条后重新编译,列表为空,本地存储没生效」
第 2 课的验收反馈法:编号、现象、你的判断。第 4 条对应的正是 storage,指出来它就知道去查读写。猜 setData 方向反了(界面是有的,丢的是持久化);重做和加需求都是老毛病。