返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React hooks的优缺点详解
  • 585
分享到

React hooks的优缺点详解

2024-04-02 19:04:59 585人浏览 独家记忆
摘要

目录前言 优点:缺点:一、响应式的useEffect 二、状态不同步 怎么避免React hooks的常见问题 前言 Hook 是 React 16.8 的新增特性。它是完全可选的

前言

Hook 是 React 16.8 的新增特性。它是完全可选的,并且100%向后兼容。它可以让你使用函数组件的方式,运用类组件以及 react 其他的一些特性,比如管理状态、生命周期钩子等。从概念上讲,React 组件一直更像是函数。而 Hook 则拥抱了函数,同时也没有牺牲 React 的精神原则。

优点:

1、代码可读性更强,原本同一块功能的代码逻辑被拆分在了不同的生命周期函数中,容易使开发者不利于维护和迭代,通过 React Hooks 可以将功能代码聚合,方便阅读维护。例如,每个生命周期中常常会包含一些不相关的逻辑。一般我们都会在 componentDidMount 和 componentDidUpdate 中获取数据。但是,同一个 componentDidMount 中可能也包含很多其它的逻辑,如设置事件监听,而之后需在 componentWillUnmount 中清除。相互关联且需要对照修改的代码被进行了拆分,而完全不相关的代码却在同一个方法中组合在一起。如此很容易产生 bug,并且导致逻辑不一致。
2、组件树层级变浅。在原本的代码中,我们经常使用 HOC/render props 等方式来复用组件的状态,增强功能等,无疑增加了组件树层数及渲染,在 React DevTools 中观察过 React 应用,你会发现由 providers,consumers,高阶组件,render props 等其他抽象层组成的组件会形成“嵌套地狱”。而在 React Hooks 中,这些功能都可以通过强大的自定义的 Hooks 来实现。
3、不用再去考虑 this 的指向问题。在类组件中,你必须去理解 javascript 中 this 的工作方式。

缺点:

一、响应式的useEffect

写函数组件时,你不得不改变一些写法习惯。你必须清楚代码中useEffect和useCallback的“依赖项数组”的改变时机。有时候,你的useEffect依赖某个函数的不可变性,这个函数的不可变性又依赖于另一个函数的不可变性,这样便形成了一条依赖链。一旦这条依赖链的某个节点意外地被改变了,你的useEffect就被意外地触发了,如果你的useEffect是幂等的操作,可能带来的是性能层次的问题,如果是非幂等,那就糟糕了。

所以,对比componentDidmount和componentDidUpdate,useEffect带来的心智负担更大。

二、状态不同步

函数的运行是独立的,每个函数都有一份独立的作用域。函数的变量是保存在运行时的作用域里面,当我们有异步操作的时候,经常会碰到异步回调的变量引用是之前的,也就是旧的(这里也可以理解成闭包)。比如下面的一个例子:


import React, { useState } from "react";
​
const Counter = () => {
  const [counter, setCounter] = useState(0);
​
  const onAlertButtonClick = () => {
    setTimeout(() => {
      alert("Value: " + counter);
    }, 3000);
  };
​
  return (
    <div>
      <p>You clicked {counter} times.</p>
      <button onClick={() => setCounter(counter + 1)}>Click me</button>
      <button onClick={onAlertButtonClick}>
        Show me the value in 3 seconds
      </button>
    </div>
  );
};
​
export default Counter;

当你点击Show me the value in 3 seconds的后,紧接着点击Click me使得counter的值从0变成1。三秒后,定时器触发,但alert出来的是0(旧值),但我们希望的结果是当前的状态1。

这个问题在class component不会出现,因为class component的属性和方法都存放在一个instance上,调用方式是:this.state.xxx和this.method()。因为每次都是从一个不变的instance上进行取值,所以不存在引用是旧的问题。

其实解决这个hooks的问题也可以参照类的instance。用useRef返回的immutable RefObject(current属性是可变的)来保存state,然后取值方式从counter变成了: counterRef.current。如下:


import React, { useState, useRef, useEffect } from "react";
​
const Counter = () => {
  const [counter, setCounter] = useState(0);
  const counterRef = useRef(counter);
​
  const onAlertButtonClick = () => {
    setTimeout(() => {
      alert("Value: " + counterRef.current);
    }, 3000);
  };
​
  useEffect(() => {
    counterRef.current = counter;
  });
​
  return (
    <div>
      <p>You clicked {counter} times.</p>
      <button onClick={() => setCounter(counter + 1)}>Click me</button>
      <button onClick={onAlertButtonClick}>
        Show me the value in 3 seconds
      </button>
    </div>
  );
};
​
export default Counter;

结果我们所期待,alert的是当前的值1。

怎么避免react hooks的常见问题

  • 不要在useEffect里面写太多的依赖项,划分这些依赖项成多个单一功能的useEffect。其实这点是遵循了软件设计的“单一职责模式”。
  • 如果你碰到状态不同步的问题,可以考虑下手动传递参数到函数。如:

   // showCount的count来自父级作用域 
   const [count,setCount] = useState(xxx); 
   function showCount(){ console.log(count) } 

   // showCount的count来自参数 
   const [count,setCount] = useState(xxx); 
   function showCount(c){ console.log(c) }

但这个也只能解决一部分问题,很多时候你不得不使用上述的useRef方案。

3. 重视eslint-plugin-react-hooks插件的警告。

4. 复杂业务的时候,使用Component代替hooks。

以上就是React hooks的优缺点详解的详细内容,更多关于React hooks的优缺点的资料请关注编程网其它相关文章!

--结束END--

本文标题: React hooks的优缺点详解

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

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

猜你喜欢
  • React hooks的优缺点详解
    目录前言 优点:缺点:一、响应式的useEffect 二、状态不同步 怎么避免react hooks的常见问题 前言 Hook 是 React 16.8 的新增特性。它是完全可选的...
    99+
    2024-04-02
  • React之Hooks详解
    目录什么是钩子(hooks)类组件函数组件为什么创造Hooks总结什么是钩子(hooks) 消息处理的一种方法, 用来监视指定程序 函数组件中需要处理副作用,可以用...
    99+
    2024-04-02
  • React 高阶组件与Render Props优缺点详解
    目录高阶组件增强型高级组件注入型高阶组件高阶组件 VS Render Props总结高阶组件 高阶组件(HOC)是一个接受组件作为参数并返回一个新组件的函数,如果多个组件有相同的逻辑...
    99+
    2022-11-16
    React 高阶组件 Render Props Render Props
  • React的优缺点有哪些
    React的优缺点:1、React优点,速度很快、性能好、跨浏览器兼容、代码模块化重用性高、单向数据流、兼容性好;2、React缺点,不适合单独做一个完整的框架,本身只是View。具体内容如下:React:React主要用于构建UI。你可以...
    99+
    2024-04-02
  • React的优缺点是什么
    这篇文章主要介绍“React的优缺点是什么”,在日常操作中,相信很多人在React的优缺点是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React的优缺点是什么”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-05
  • hooks函数组件有哪些优缺点
    Hooks函数组件主要有以下优点:1. 更简洁:相比于传统的类组件,Hooks函数组件具有更简洁的写法,可以将组件的逻辑和状态都写在...
    99+
    2023-10-10
    hooks
  • react有什么优缺点
    这篇文章给大家分享的是有关react有什么优缺点的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 优点为:1、创建动态Web应用程序变得更加容易;2、可...
    99+
    2024-04-02
  • Android AsyncTask的优缺点详解
    1、Asynctask简介 1.1 使用方法简介 Asynctask作为Android的基础之一,怎么使用就不多讲解了,网上到处都是教程,建议查看Android官方API文档:...
    99+
    2022-06-06
    asynctask Android
  • vue和react的区别及优缺点解读
    目录vue和react的区别及优缺点共同点不同点react和vue哪个比较受欢迎,以后主流应该是哪个方向?Vue和React那个更好?为什么react还比vue火总结vue和reac...
    99+
    2023-03-06
    vue和react区别 vue和react优缺点 vue和react
  • 详解React Hooks是如何工作的
    目录1. React Hooks VS 纯函数2. 简单 myUseState3. 改进 myUseState4. 实现原理引发的 Hooks 规则1. React Hooks VS...
    99+
    2024-04-02
  • golang函数的优缺点详解
    go 函数的优缺点:优点:可重用性:可重复使用,无需复制代码。封装:隐藏实现细节,提高代码可读性。测试性:易于单独测试,有助于捕获错误。性能:高效,编译时直接转换为机器码。缺点:内存开销...
    99+
    2024-04-20
    函数 golang 代码可读性
  • React从Class方式转Hooks详解
    目录React Hooks前言Why Hooks ?For ClassFor FunctionClass & Hooks 对比Hooks如何保存组件状态和使用生命周期?1、u...
    99+
    2024-04-02
  • React ,Angular, Vue.js的优缺点有哪些
    本篇内容介绍了“React ,Angular, Vue.js的优缺点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,...
    99+
    2024-04-02
  • 详解如何构建自己的react hooks
    目录1. 常用的一个 hooks1.1 useState: 状态钩子1.2 useEffect: 副作用钩子1.3 useMemo 和 useCallback2. 实现几个自定义的 ...
    99+
    2024-04-02
  • vue和react有哪些优缺点
    这篇文章主要介绍“vue和react有哪些优缺点”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue和react有哪些优缺点”文章能帮助大家解决问题。Vue优点:简单易学双向数据绑定轻量级框架组件化...
    99+
    2023-06-27
  • 详解React hooks组件通信方法
    目录一、前言二、父子组件通信1)父组件传值给子组件2)子组件传值给父组件3)跨组件传值(父传孙子组件)一、前言 组件通信是React中的一个重要的知识点,下面列举一下 react h...
    99+
    2024-04-02
  • 基于React Hooks的小型状态管理详解
    目录实现基于 React Hooks 的状态共享使用感受本文主要介绍一种基于 React Hooks 的状态共享方案,介绍其实现,并总结一下使用感受,目的是在状态管理方面提供多一种选...
    99+
    2024-04-02
  • vue和react的区别及优缺点是什么
    这篇文章主要讲解了“vue和react的区别及优缺点是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue和react的区别及优缺点是什么”吧!vue和react的区别及优缺点共同点数据...
    99+
    2023-07-05
  • hooks写React组件的5个注意细节详解
    目录正文01.不需要render的场景下使用useState02.使用了router.push而非link03.通过useEffect来处理actions04.单一职责组件05.单一...
    99+
    2023-03-13
    hooks写React组件 React hooks
  • 使用 React Hooks 重构类组件的示例详解
    目录1. 管理和更新组件状态2. 状态更新后的操作3. 获取数据4. 卸载组件时清理副作用5.  防止组件重新渲染6. Context API7. 跨重新渲染保留值8. 如...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作