为什么要在更改状态或进行操作之前克隆反应状态?

时间:2020-07-23 20:00:36

标签: javascript reactjs

有人告诉我,每当我使用反应状态或对其进行更改时,都应该对其进行克隆或复制。

const cloneState = [...this.state]
cloneState.name = 'hardik'

但是我不确定为什么人们会推荐它,为什么我不能直接更改状态?

为什么我不应该只是使用它

this.setState({name: 'hardik'})

2 个答案:

答案 0 :(得分:1)

React根据状态是否已更改来确定是否重新渲染组件。

它通过测试其引用相等性来确定状态是否已更改。

这意味着它将检查this.state === this.state

如果您要改变一个状态,请说一遍:cloneState.name = "hardik",因为这是一个突变,所以状态在参考上是相等的。

当通过创建新对象[...this.state] === this.state“克隆”状态为false时,将触发重新渲染。

答案 1 :(得分:-1)

最好使用useState挂钩,并仅使用setState示例来更改状态:

const [inputValue, setInputValue] = useState ("")
<input value = {inputValue} onChange = {(e) => setInputValue (e.target.value)} />