-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
5. 在React中处理状态:要考虑的四种不变方法 #5
Comments
此文非原创,原作者写的太好,直接参考原作者文章做的大概的翻译:https://www.freecodecamp.org/news/handling-state-in-react-four-immutable-approaches-to-consider-d1f5c00249d5/ React中最容易混淆的就是:state。
问题在第4行上。第4行实际上是对状态进行突变,因为用户变量是对状态的引用。state应视为不可变的。
为什么呢? 上面的示例通常可以正常工作,但是要避免出现极端情况,请将状态视为不可变的。 以下是将状态视为不可变的四种方法: 方法一:Object.assign
在第3行中,创建了state下存储的user对象的单独副本。现在,我可以安全地更改第4行上的user对象,它是与state对象完全独立的对象。 方法二:对象传播
在第3行中,使用this.state.user上的所有属性创建一个新对象,然后将[name]表示的属性设置为在event.target.value上传递的新值”。因此,此方法与Object.assign方法类似,但是有两个好处: 方法三:Immutability Helper(不可变数据的辅助工具)
在第4行,调用了merge,这是由Immutability Helper提供的许多命令之一。与Object.assign一样,我将目标对象作为第一个参数传递给它,然后指定要合并的属性。 方法四:Immutable.js
immutable.js的优点:如果尝试直接改变状态,它将失败。使用上面其他方法,很容易忘记,当你直接更改状态时,React不会告警。 还可以考虑以下两个有趣的替代方法: 注意:留心嵌套对象 你可能很想接触深层合并工具,例如clone-deep或lodash.merge,但要避免盲目深层克隆。因为: 最后建议:使用 setState 的函数式更新形式
如果要在setState调用完成后运行代码,请使用setState的函数式更新形式:
我的想法 |
No description provided.
The text was updated successfully, but these errors were encountered: