码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • react hooks编程规范(内部使用)


    规范1、根据情况使用单个State变量还是多个

    useState 的出现,让我们可以使用多个 state 变量来保存 state,比如:

    写法一、

    const [width, setWidth] = useState(100);
    const [height, setHeight] = useState(100);
    const [left, setLeft] = useState(0);
    const [top, setTop] = useState(0);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    写法二、

    const [state, setState] = useState({
       
      width: 100,
      height: 100,
      left: 0,
      top: 0
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果使用单个 state 变量,每次更新 state 时需要合并之前的 state。因为 useState 返回的 setState 会替换原来的值。这一点和 Class 组件的 this.setState 不同。this.setState 会把更新的字段自动合并到 this.state 对象中。

    const handleMouseMove = (e) => {
       
      setState((prevState) => ({
       
        ...prevState,
        left: e.pageX,
        top: e.pageY,
      }))
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    使用多个 state 变量可以让 state 的粒度更细,更易于逻辑的拆分和组合。比如,我们可以将关联的逻辑提取到自定义 Hook 中:

    function usePosition() {
       
      const [left, setLeft] = useState(0);
      const [top, setTop] = useState(0);
    
      useEffect(() => {
       
        // ...
      }, []);
    
      return [left, top, setLeft, setTop];
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    我们发现,每次更新 left 时 top 也会随之更新。因此,把 top 和left拆分为两个 state 变量显得有点多余。
    在使用 state 之前,我们需要考虑状态拆分的「粒度」问题。如果粒度过细,代码就会变得比较冗余。如果粒度过粗,代码的可复用性就会降低。那么,到底哪些 state 应该合并,哪些 state 应该拆分呢?我总结了下面两点:

    • 将完全不相关的 state 拆分为多组 state。比如size和 position。
    • 如果某些 state 是相互关联的,或者需要一起发生改变,就可以把它们合并为一组 state。比如 left 和 top。

    规范2、hooks依赖数组不得超过3个

    在 React 中,除了 useEffect 外,接收依赖数组作为参数的 Hook 还有 useMemo、useCallback 和 useImperativeHandle。如果依赖数组依赖了过多东西,可

  • 相关阅读:
    【Python游戏】Python各大游戏合集(5):塔防游戏、飞机大战、连连看、打地鼠、记忆翻牌 | 附带源码
    【云原生之kubernetes实战】在k8s环境下安装Taskover任务管理工具
    代码随想录第33天 | ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
    springboot社区人员管理系统的设计与实现毕业设计源码260839
    【Javascript】ajax(阿甲克斯)
    羊了个羊的接口测试
    salesforce零基础学习(一百三十三)ListView的button思考
    Mybatis Mapper接口和xml绑定的多种方式、内部实现原理和过程
    MySQL详细案例 1:MySQL主从复制与读写分离
    Web前端大作业 体育主题足球网页制作 足球梅西HTML网页设计制作 dreamweaver学生网页源代码
  • 原文地址:https://blog.csdn.net/qq_29722281/article/details/124770543
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号