Taro中如何正确使用React的useState更新对象属性?
我在Taro里用React写页面,想更新state里的一个对象属性,但发现视图没刷新。我试过直接修改对象属性再setState,也试过展开运算符,都不行。是不是Taro对React的状态更新有特殊处理?
下面是我的代码:
const [userInfo, setUserInfo] = useState({ name: '张三', age: 20 });
// 这样写页面不更新
userInfo.age = 21;
setUserInfo(userInfo);
// 也不行
setUserInfo({ ...userInfo, age: 21 });
先说你的代码问题。其实第二段代码是对的,但你可能忽略了状态更新是异步的,直接修改对象引用可能会导致问题。Taro本身对React状态管理没有特殊处理,问题出在我们怎么更新state。
给你个可靠的写法:
这方法亲测有效,用了回调函数来获取最新的state。血泪教训告诉我,直接操作原对象再setState很容易出问题,因为React检测不到引用变化。
记得把所有需要更新的字段都放进去,别想着只改一个属性就能自动合并其他值,不然又要掉进另一个坑里了。这个写法虽然看起来麻烦点,但稳定可靠。