经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » React » 查看文章
如何编写难以维护的React代码?——滥用useEffect
来源:cnblogs  作者:赵康  时间:2023/7/26 9:15:31  对本文有异议

如何编写难以维护的React代码?——滥用useEffect

在许多项目中,我们经常会遇到一些难以维护的React代码。其中一种常见的情况是滥用useEffect钩子,特别是在处理衍生状态时。让我们来看一个例子:

  1. const ComponentA = ({ list }) => {
  2. const [filteredList, setFilteredList] = useState(list);
  3. const [filter, setFilter] = useState({});
  4. useEffect(() => {
  5. setFilteredList(_.filter(list, filter));
  6. }, [filter]);
  7. /*...*/
  8. return (
  9. <>
  10. {/*...*/}
  11. <Filter filter={filter} onChange={setFilter} />
  12. <List data={filteredList} />
  13. {/*...*/}
  14. </>
  15. );
  16. };

事实上,filteredList 是一个衍生状态,可以通过计算 list 和 filter 得出:list + filter => filteredList。所以可以优化成这样:

  1. const ComponentB = ({ list }) => {
  2. const [filter, setFilter] = useState({});
  3. const filteredList = useMemo(() => _.filter(list, filter), [list, filter]);
  4. /*...*/
  5. return (
  6. <>
  7. {/*...*/}
  8. <Filter filter={filter} onChange={setFilter} />
  9. <List data={filteredList} />
  10. {/*...*/}
  11. </>
  12. );
  13. };

在改进后的代码中,我们使用了 useMemo 来计算 filteredList,这样可以避免滥用 useState 和 useEffect。通过传入依赖数组 [list, filter],只有在 list 或 filter 发生变化时,才会重新计算 filteredList,从而优化性能。

减少状态的使用可以有助于降低代码的复杂性,减少潜在的错误。使用 useMemo 可以将计算逻辑从渲染过程中抽离出来,使代码更易于维护和理解。Less States, Less Bugs.

总结:简洁且高效的代码是开发者的追求目标,它不仅有助于减少错误,而且在项目的长期维护中也更容易被团队成员理解与修改。

原文链接:https://www.cnblogs.com/forzhaokang/p/17579785.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号