🛠️ 零基础用 Claude Code 做出第一个小程序 · 第 2 周:做成微信小程序,跑在你手机上

小程序页面数据怎么变:data、setData、本地存储(Claude Code 实战)

数据在 data 里,改数据用 setData,存本地用 storage

一句话先懂 · TL;DR

原生小程序页面的三件套:data 放数据、setData 改数据界面才会更新、wx.setStorageSync 存到本地。用第 1 周的验收标准让 Claude Code 把待办清单完整搬进小程序。

页面的三件套

网页里 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」
💡第 5 条就是第 3 课的「空的时候怎么办」。以后每份验收标准都带上空状态。

自测 · 学完检查一下

想真正动手做题、记进度、攒连胜?到互动课里练。

AI 写了 this.data.todos.push(newItem),控制台里数组确实多了一条,但页面列表没变。原因是?

答案:没有用 setData,小程序只在 setData 时才刷新界面

这是小程序和网页最不一样的一条:数据变了不等于界面变了,setData 才是「通知界面刷新」的动作。push 能用,重启无关,本地存储管的是刷新后还在不在,不管当前显示。

判断:用了 setData 之后数据就自动保存到手机本地了,关掉小程序再打开还在。

答案:

setData 只管当前界面显示,小程序关掉数据就没了。要下次打开还在,必须另外调 wx.setStorageSync 存、启动时 getStorageSync 读。两件事,两个动作。

把网页版验收标准改成小程序版时,「刷新页面后数据还在」这一条应该改成?

答案:「关掉小程序再打开(或在开发者工具重新编译),数据还在」

小程序没有「刷新页面」这个动作,对应的用户行为是关掉再打开。这一条不能删,它验的是本地存储有没有生效。「重装后还在」是云端同步的要求,那是第 4 课的事。

AI 做完后,你在模拟器里添加了两条待办,点「编译」重新加载,列表空了。按验收标准,你发回去的应该是?

答案:「验收第 4 条没过:添加两条后重新编译,列表为空,本地存储没生效」

第 2 课的验收反馈法:编号、现象、你的判断。第 4 条对应的正是 storage,指出来它就知道去查读写。猜 setData 方向反了(界面是有的,丢的是持久化);重做和加需求都是老毛病。

想边练边学,而不只是读?

到互动课里答题、记进度、攒连胜——游客即可试学,无需注册。

进入互动课程 →

学点新东西,不错过更新

新课程、新功能、学习小技巧——偶尔一封,随时退订。