【发布时间】:2020-10-20 05:28:01
【问题描述】:
有人可以向我解释一下下面的代码 sn-p 吗?为什么handleClick() 不能正常工作(只设置了newData 的1 或2 个数据属性)而handleClick2() 工作正常。
我猜测问题是由于循环造成的(因为这是唯一的区别),但为什么循环会导致这种效果?
沙盒链接:https://codesandbox.io/s/restless-surf-u9i5s?file=/src/App.js:0-969
import React, { useState, useEffect } from "react";
import "./styles.css";
const App = () => {
const [newData, setNewData] = useState({
data1: '',
data2: '',
data3: '',
data4: ''
})
const handleClick = () => {
let fields = ['data1', 'data2', 'data3', 'data4']
let field
for (field of fields) {
setNewData(oldState => ({...oldState, [field]: 'test'}))
}
}
const handleClick2 = () => {
setNewData(oldState => ({...oldState, data1: 'test'}))
setNewData(oldState => ({...oldState, data2: 'test'}))
setNewData(oldState => ({...oldState, data3: 'test'}))
setNewData(oldState => ({...oldState, data4: 'test'}))
}
useEffect(() => {
console.log('State: ' + JSON.stringify(newData))
}, [newData])
return (
<div className="App">
<button onClick={handleClick}>Click</button>
<button onClick={handleClick2}>Click2</button>
</div>
);
}
export default App
【问题讨论】:
标签: reactjs react-hooks react-state use-state