React16:Hooks总览

动机

React官网2018年的React conf上都提到了动机这个东西,那么出现hooks的动机是什么?是什么推动了hooks的出现?先来看一下Hooks的动机。

1.在组件间复用状态逻辑很难

React没有提供可复用性行为“附加”到组件的途径,在写类组件的时候,一个类是一个闭包并且state在组件间传递并不怎么友好,虽然可以使用props和高阶组件来解决,但是这样会组件的结构更麻烦。如果你在 React DevTools 中观察过 React 应用,你会发现由 providers,consumers,高阶组件,render props 等其他抽象层组成的组件会形成“嵌套地狱”。

2. 复杂组件变得难以理解

React中的类组件是很重的,比如说我就想实现一个非常简单的功能,必须要带一堆钩子函数,让一个简单的组件变得很复杂。而且由于不同的生命周期在不同的阶段调用,导致我们会在相应的地方作一些处理,有可能把一些完全不相干的代码因为执行周期相同必须放在同一个生命周期中,很容易引发bug。

3. 难以理解的class

文档上说这点主要是学习class是一个难点。因为我自己写es6 class有一段时间了,所以class对我自己来说还是可以的,并且this理解的还可以。

什么是Hooks?

那么什么是Hook,Hook顾名思义就是钩子的意思。在函数组件中把React的状态和生命周期等这些特性钩入进入,这就是React的Hook。

特指表明React的Hook作用是把类组件的一些特性钩入函数组件中,因在类组件中是不可以使Hook的。

Hooks的使用规则

Hook就是javascript函数,但是使用有两个规则:

  1. 只能在函数的最外层调用hook。不要在循环、条件判断或者子函数中调用。(这个关系到了hooks的执行机制,会在下面hook中说到)
  2. 只能在React的函数组件中调用Hook。不要在其他javascript函数中调用(自定义hooks中也可以调用)

使用Hooks的好处

  1. 使用hooks,如果业务变更,就不需要把函数组件修改成类组件。
  2. 告别了繁杂的this和合并了难以记忆的生命周期。
  3. 支持包装自己的Hooks(自定义Hooks),是基于纯命令式的api。
  4. 更好的完成状态之间的共享,解决原来class组件内部封装的问题,也解决了高阶组件和函数组件的嵌套过深。一个组件一个自己的state,一个组件内可以公用。

内置的Hook

React一共内置了9种Hook。

  • useState
  • usEffect
  • useContext
  • useReducer
  • useCallback
  • useMemo
  • useRef
  • useImperativeHandle
  • useLayoutEffect

useState

以前的函数式组件被成为纯函数组件或者无状态组件,是只能接受父组件传来的props并且只能做展示功能,不能使用state也没有生命周期。

现在State Hook 可以让函数式组件使用状态。

useState是React的一个Hook,它是一个方法,可以传入值作为state的默认值,返回一个数组,数组的第一项是对应的状态(默认值会赋予状态),数组的第二项是更新状态的函数。

import React, { useState } from "react";

const Greeting = () => {
    const states = useState(0);
    const count = states[0];
    const setCount = s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
React中有几种常用的Hooks,包括useState、useEffect、useContext和useReducer。 1. useState:useState是React提供的一个Hook,用于在函数组件中添加状态管理。它接收一个初始值作为参数,并返回一个包含当前状态值和更新状态值的数组。通过调用返回的更新函数,可以更新状态值。这个Hook可以让我们在函数组件中使用类似于class组件中的this.state的功能。 2. useEffect:useEffect是用来执行副作用操作的Hook,可以让我们在函数组件中执行一些与渲染无关的操作,比如数据请求、订阅事件等。它接收两个参数,第一个参数是一个函数,用于执行副作用操作;第二个参数是一个依赖数组,用于控制何时执行副作用操作。 3. useContext:useContext是用来获取上下文(Context)的Hook,它接收一个上下文对象作为参数,并返回该上下文的当前值。通过使用useContext,可以避免在多层组件中通过props传递数据。 4. useReducer:useReducer是一个替代useState的Hook,可用于管理复杂的状态逻辑。它接收一个reducer函数和一个初始状态作为参数,并返回一个包含当前状态值和触发状态更新的dispatch函数的数组。使用useReducer可以更好地管理具有多个相关状态的组件。 这些Hooks可以帮助我们在函数组件中实现更复杂的逻辑和状态管理,提升代码的可读性和可维护性。在使用Hooks时,需要注意遵循相关的规则,例如不在循环、条件或嵌套函数中调用Hook,并确保在React函数的最顶层以及任何return之前调用它们。另外,还可以自定义Hooks来封装可复用的逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [React16Hooks总览](https://blog.csdn.net/qq_42198495/article/details/125092090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [React函数组件Hooks的使用](https://blog.csdn.net/zgh472365411/article/details/126773365)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值