返回顶部
首页 > 资讯 > 前端开发 > node.js >简化React Hook的方法有哪些
  • 678
分享到

简化React Hook的方法有哪些

2024-04-02 19:04:59 678人浏览 泡泡鱼
摘要

这篇文章主要讲解了“简化React Hook的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“简化React Hook的方法有哪些”吧!1. 减少

这篇文章主要讲解了“简化React Hook的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“简化React Hook的方法有哪些”吧!

1. 减少 useState 数量

当你使用hook进行开发时,很容易使用过多的 useState 调用,或者将所有的状态缩减为单一的、过于复杂的  useState。提高hook的可读性的最好方法之一就是优先考虑你的 useState 调用。我喜欢在我写的钩子中遵循一些关于状态实现的规则。

(1) 优先考虑易读性

我更喜欢将状态读取为对象,而不是使用多个具有简单值的 useState 命令。使用更少的 useState  命令也会让你的钩子的返回更容易,并且在组件中的实现更直接。虽然这是我的偏好,但代码是一个非常个人化的东西,也是非常有表现力的。我写代码时的第一条规则是优先考虑可读性,遵循这个规则会让你的代码更容易维护,迫使你去思考你所写的东西,并让别人更容易遵循你的代码。如果这是你从这个文章中带走的唯一东西,那么我已经完成了我的工作。

(2) 评估状态对象的内容

组件从一开始就没有被完美地规划过,随着组件的增长,你的 useState 中包含的属性可能也会变得越来越复杂。在整个开发周期中,我强烈建议评估你的  useState 调用的内容,以确定将状态部分分成其他 useState  调用是否有意义。你可能想按功能或类型对状态值进行分组。一般来说,我喜欢把状态数据按照我认为通常会一起更新的属性来分组,或者按照状态属性的功能来分组,比如数据和视图属性。

2. 利用你的Hook返回

当我刚开始写自定义Hook时,很容易遵循类似于默认的 useState  钩子的返回样式。虽然这并不是坏事,但在函数之上使用一个返回数组来返回多个状态变量,会很麻烦。想象一下,除了处理数据选择的函数外,还可以返回2个不同的状态变量(1个是数据状态,1个是视图状态)的钩子,用数组风格的返回方式编写,它可能看起来像这样。

function useBasicHook() {   const [dataState, setDataState] = useState({     serverData: {},     selections: {}   });   const [viewState, setViewState] = useState({     menuExpanded: false,     submitFORMData: {}   })      const toggleMenuExpand = () => {     setViewState({       menuExpanded: !viewState.menuExpanded,       submitFormData: viewState.submitFormData     })   }      return [dataState, viewState, toggleMenuExpande]; }  function BasicComponent(){   const [dataState, viewState, toggleMenuExpand] = useBasicHook();      return <div>     </div> }

看看这个hook,很容易看出,如果在返回中添加额外的函数或变量,hook的实现会很快失控。如果你不小心破坏了数组的顺序,或者用不正确的名称,会造成额外的混乱和可能的错误。我们可以通过更新hook返回一个对象来防止这种情况的发生,就像这样。

function useBasicHook() {   const [dataState, setDataState] = useState({     serverData: {},     selections: {}   });   const [viewState, setViewState] = useState({     menuExpanded: false,     submitFormData: {}   })      const toggleMenuExpand = () => {     setViewState({       menuExpanded: !viewState.menuExpanded,       submitFormData: viewState.submitFormData     })   }      return {     dataState: dataState,     viewState: viewState,     toggleMenuExpand: toggleMenuExpand   }; }  function BasicComponent(){   const state = useBasicHook();   // or   // const {dataState, viewState, toggleMenuExpand} = useBasicHook();      return <div>     </div> }

将返回值转换为对象还有其他好处,包括:

  • 如果hook在多个组件之间共享或作为库共享,则在更新后提高hook版本的兼容性;

  • 在使用Hook在组件顶部提供相同级别的Hook api时,仍然可以解构对象。

还有一件很酷的事情,你可以用你的钩子返回,就是在你的状态中创建基于组件工厂函数的小状态。这提供了一种很好的方式,可以将组件构建器共享给实现钩子的组件,而无需将状态公开给该组件。

3. 使用合并钩子简化 setState 调用

在React中使用类而不是基于函数的组件进行开发,当涉及到状态管理时,确实有一些开箱即用的优势,对我来说,最主要的是旧状态与新状态的合并。React  Docs for  State提供了React.Component中内置的状态合并功能的良好示例。虽然该功能没有直接内置到钩子中,但我们可以通过一个简单的自定义钩子来复制这种行为,它可以替换我们的  useState 调用,给我们同样的行为。

function useMergeState(initialState) {   const [state, setState] = useState(initialState);   // 使用 useRef 来改进异步调用 setState 时的功能。   const stateRef = useRef(state);    function setRefState(newState) {       stateRef.current = newState;       return setState(newState);   }    function mergeState(newState) {     var finalState = newState;          if (typeof stateRef.current !== typeof newState) {       console.warn(         "useMergeState warning: 状态数据类型不匹配,用新的状态覆盖状态。"       );       finalState = newState;     } else {              if (typeof stateRef.current == "object" && !Array.isArray(stateRef.current)) {         // 现有状态是一个对象,继续尝试合并         if (typeof newState == "object" && !Array.isArray(newState)) {           finalState = { ...stateRef.current, ...newState };         }       }     }      return setRefState(finalState);   }    return [stateRef.current, mergeState]; }

4. 考虑拆分Hook

无论组件的复杂程度如何,我总是建议使用自定义钩子;然而,在构建自定义钩子时,将一个过于复杂的钩子分割成多个较简单的钩子是非常有用的。在我的项目中,我喜欢根据功能来拆分钩子逻辑,比如说,把一个钩子拆成逻辑上的状态子集,比如数据/WEB  API交互的钩子和显示状态的单独的钩子,可能会有好处。回想一下钩子返回部分的例子钩子,这样拆开来可能会有帮助。

function useDataHook() {   const [dataState, setDataState] = useState({     serverData: {},     selections: {}   });      return dataState; }  function useDisplayHook() {   const [viewState, setViewState] = useState({     menuExpanded: false,     submitFormData: {}   })      const toggleMenuExpand = () => {     setViewState({       menuExpanded: !viewState.menuExpanded,       submitFormData: viewState.submitFormData     })   }      return {     viewState: viewState,     toggleMenuExpand: toggleMenuExpand }  function BasicComponent(){   const data = useDataHook();   const display = useDisplayHook();      return <div>     </div> }

拆分后的示例挂钩

简化React Hook的方法有哪些

5. 评估 useEffect 调用,以防止不必要的重新渲染

useEffect钩子非常有用,但是如果使用不当,可能会导致过度渲染。查看自定义钩子时,值得评估你的useEffect调用。我喜欢遵守以下经验法则:

如果一个 useEffect 在同一个钩子作用域中监听状态变量,那么这个效果不应该更新状态本身。

如果你有多个useEffect语句在侦听同一组变量,请考虑将它们组合在一起。

尽管结合使用 useEffects 有助于减少重新渲染次数,但首先要优先考虑代码的可读性。

感谢各位的阅读,以上就是“简化React Hook的方法有哪些”的内容了,经过本文的学习后,相信大家对简化React Hook的方法有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 简化React Hook的方法有哪些

本文链接: https://lsjlt.com/news/81450.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 简化React Hook的方法有哪些
    这篇文章主要讲解了“简化React Hook的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“简化React Hook的方法有哪些”吧!1. 减少 ...
    99+
    2024-04-02
  • 有哪些React Hook库
    本篇内容介绍了“有哪些React Hook库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.use-ht...
    99+
    2024-04-02
  • React中常用的Hook有哪些
    目录一、简介二、使用1、State Hook2、Effect Hook3、Ref Hook一、简介 Hook是React 16.8.0版本增加的新特性/新语法 可以在函数组件中使用 ...
    99+
    2023-01-10
    React Hook原理 React Hook有哪些
  • react context优化的方法有哪些
    本篇内容介绍了“react context优化的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言我们在使用reac...
    99+
    2023-07-04
  • React Hook之使用State Hook的方法
    目录等价的class示例Hook和函数组件Hook是什么?声明State变量读取State更新State小结提示:方括号有什么用?提示:使用多个state变量总结Hook 简介章节中...
    99+
    2024-04-02
  • 自定义Hook的方法有哪些
    这篇文章主要介绍“自定义Hook的方法有哪些”,在日常操作中,相信很多人在自定义Hook的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”自定义Hook的方法有哪些”...
    99+
    2024-04-02
  • react中使用hook有哪些好处
    今天小编给大家分享一下react中使用hook有哪些好处的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • react性能优化的方法有哪些
    1. 使用生命周期方法:React的生命周期方法可以帮助我们优化组件的性能。例如,使用shouldComponentUpdate方法...
    99+
    2023-09-13
    react
  • React自定义hook的方法
    目录什么是hook常用的有哪些hook自定义hook什么是hook Hook是 React 16.8 的新增特性。它通常与函数式组件同时使用。可以使函数式组件在不编写 class 的...
    99+
    2024-04-02
  • React hook实现简单的websocket封装方式
    目录React hook实现websocket封装react自定义hook解决websocket连接,useWebSocket1、描述2、代码React hook实现websocke...
    99+
    2024-04-02
  • React中10种Hook的使用方法
    本篇文章给大家分享的是有关React中10种Hook的使用方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。React Hook是什么?React官网是这么介绍的: Hook ...
    99+
    2023-06-25
  • react有哪些遍历方法
    这篇文章主要讲解了“react有哪些遍历方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react有哪些遍历方法”吧! rea...
    99+
    2024-04-02
  • React+Typescript实现倒计时Hook的方法
    首先对setInterval做了Hook化封装👇 import { useEffect, useRef } from 'react' function us...
    99+
    2024-04-02
  • react有哪些方法改变state
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react有哪些方法改变state在react中正确修改state一,在react中可以通过this.state.{属性}的方式直接获取state,但当我...
    99+
    2023-05-14
    React state
  • react更新state方法有哪些
    本教程操作环境:Windows7系统、react17.0.1版、Dell G3电脑。react更新state方法有哪些react中父级props改变,更新子级state的多种方法子组件:class Children extends Comp...
    99+
    2022-11-22
    state React
  • javascript简写的方法有哪些
    这篇文章主要介绍了javascript简写的方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 空(null, undefined...
    99+
    2024-04-02
  • React代码拆分的方法有哪些
    本篇内容介绍了“React代码拆分的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动态加载(import)es6提供import(...
    99+
    2023-07-05
  • SQL优化极简法则有哪些
    这篇文章主要介绍SQL优化极简法则有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!查询优化是一个复杂的工程,涉及从硬件到参数配置、不同数据库的解析器、优化器实现、SQL 语句的执...
    99+
    2024-04-02
  • react创建组件有哪些方法
    这篇文章主要介绍了react创建组件有哪些方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。函数式组件:(1)语法:function myConponent(pro...
    99+
    2023-06-14
  • React组件间通信的方法有哪些
    这篇文章给大家分享的是有关React组件间通信的方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、父子组件通信原理:父组件通过props(与vue中的props区分开)向子组件通信,子组件通过回调事件与...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作