react里state可以是一个数组吗?

没看过源码,网上说state应该是一个plain object.
可以把state设为一个数组吗 即this.state=[]

如果可以,那么setstate如何做.我尝试过[0]:
结果返回state是一个object
求解

阅读 6.7k
2 个回答

state本身一般会初始为一个object,而且setState时也是对象浅拷贝

对于setState之后,原本的Array类型变成了对象类型,则需要你理解setState是怎么运行的。setState的原理可以简化(注意是简化后的)为:

function Component(props) {
  this.props = props
}
Component.prototype.setState = function(partialState) {
  this.state = Object.assign({}, this.state, partialState)
}

也就说setState最终就是使用Object.assign浅拷贝生成一个新的‘对象’。所以不管最开始是Array和还是Map类型,都会被改为object类型:

> Object.assign({}, [], {a: '1'})
{ a: '1' }
> Object.assign({}, new Map(), {a: '1'})
{ a: '1' }

再回到题目上,题主将state作为Map或Array使用是一种错误的用法。React设计State的初衷是想你把它当成一个哈希表来用,这样的好处就是可以随时扩展出新的状态。比如现在你的组件要新增一个a属性,如果你现有的state是Array类型,那么组件的结构都要重新修改了

React Hooks出来后,推荐你使用useState,这个更接近于‘变量赋值’。

如果你想简单了解React的基本原理,可以看这篇文章

感觉你在转牛角尖

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题