没看过源码,网上说state应该是一个plain object.
可以把state设为一个数组吗 即this.state=[]
如果可以,那么setstate如何做.我尝试过[0]:
结果返回state是一个object
求解
没看过源码,网上说state应该是一个plain object.
可以把state设为一个数组吗 即this.state=[]
如果可以,那么setstate如何做.我尝试过[0]:
结果返回state是一个object
求解
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
2 回答4.3k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
5 回答3.8k 阅读
state本身一般会初始为一个object,而且setState时也是对象浅拷贝
对于setState之后,原本的Array类型变成了对象类型,则需要你理解setState是怎么运行的。setState的原理可以简化(注意是简化后的)为:
也就说setState最终就是使用
Object.assign
浅拷贝生成一个新的‘对象’。所以不管最开始是Array和还是Map类型,都会被改为object类型:再回到题目上,题主将state作为Map或Array使用是一种错误的用法。React设计State的初衷是想你把它当成一个哈希表来用,这样的好处就是可以随时扩展出新的状态。比如现在你的组件要新增一个a属性,如果你现有的state是Array类型,那么组件的结构都要重新修改了
React Hooks出来后,推荐你使用useState,这个更接近于‘变量赋值’。
如果你想简单了解React的基本原理,可以看这篇文章