没看过源码,网上说state应该是一个plain object.
可以把state设为一个数组吗 即this.state=[]
如果可以,那么setstate如何做.我尝试过[0]:
结果返回state是一个object
求解
没看过源码,网上说state应该是一个plain object.
可以把state设为一个数组吗 即this.state=[]
如果可以,那么setstate如何做.我尝试过[0]:
结果返回state是一个object
求解
13 回答12.8k 阅读
8 回答2.6k 阅读
2 回答5.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
5 回答894 阅读
5 回答1.2k 阅读✓ 已解决
3 回答2.2k 阅读
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的基本原理,可以看这篇文章