React 16.3.0-alpha.1中state不显示新增空对象?已找到临时方案
问题分析:React 16.3.0-alpha.1中添加空
items对象到state不显示的原因及解决办法 咱们先聚焦你遇到的问题:创建列表时传入了items: {},但state里看不到这个空对象。结合你给出的代码片段,我大概率能猜出问题出在哪——App.js里的addList方法逻辑不完整,导致空对象没有被正确存入state。
问题根源拆解
从你贴的代码看,App.js的addList只写了注释// Take...,还没完成实际的state更新逻辑。如果你的实现踩了以下坑,就会出现空对象“消失”的情况:
- 没有正确合并原有state的
lists对象:比如直接替换lists而不是扩展它,导致新列表的属性被遗漏 - 不小心加了空对象过滤逻辑:比如某些工具函数自动移除了空属性
- 那个React alpha版本的小bug:不过这个概率极低,毕竟React不会平白无故丢弃对象属性
正确的addList实现方式
要确保items: {}稳稳存在于state里,你需要用正确的方式合并状态。这里给你写个完整的实现,给每个新列表分配唯一ID,然后用函数式更新保证状态的准确性:
// App.js state = { lists: {} }; // 添加包含标题和空items对象的新列表 addList = list => { // 用时间戳生成唯一列表ID(也可以用uuid这类库) const uniqueListId = Date.now().toString(); // 用prevState获取最新状态,避免异步更新的坑 this.setState(prevState => ({ lists: { ...prevState.lists, // 展开原有所有列表 [uniqueListId]: list // 把新列表加进去,完整保留items: {} } })); };
这样写之后,新列表的所有属性(包括空的items对象)都会被完整存入state。
额外提醒:别被调试工具骗了
另外要注意,早期版本的React DevTools可能会默认折叠空对象,你得点击展开才能看到它,别误以为是空对象真的没存进去~
如果你的临时解决方法是给items塞个非空值(比如items: []或者{ placeholder: true })就能显示,那更说明是状态更新逻辑的问题——只要正确合并状态,空对象完全可以正常存在。
内容的提问来源于stack exchange,提问作者Jordan Walker
相关产品推荐
相关产品推荐

