【发布时间】:2021-08-22 18:44:26
【问题描述】:
我试图避免直接修改状态,所以我使用 lodash cloneDeep(),然后使用克隆设置状态。但是,我想进行额外的更改(在异步请求之后)并再次设置状态。在我将我的克隆传递给 set 函数之后,是否可以继续对该克隆进行更改?为了安全起见,我是否需要重新克隆我的克隆,或者 React 是否会克隆我的克隆?该代码可能有助于解释问题:
const [user, setUser] = useState({ name: '', email: '' })
const newUser = cloneDeep(user) // cloning to avoid modifying state directly
newUser.name = 'Steve' // setting a property on the clone
setUser(newUser) // all good up to this point
// some async stuff happens, then later:
newUser.email = 'steve@example.com' // still modifying the clone, but is this safe?
setUser(newUser)
由于我修改了之前使用 setUser 传递的克隆,那只是直接修改状态吗?
当我调用setUser() 时,我试图检查 React 源代码以确定它们是否在进行克隆,但我无法理解发生了什么。 :)
【问题讨论】:
标签: javascript reactjs react-hooks lodash