Hooks

本文详细介绍了React Hooks的使用规则,包括只能在函数组件的最外层调用、只能在React组件或自定义Hook中调用。探讨了类组件的不足,如状态逻辑复用困难、组件层级冗余等问题。接着,文章阐述了Hooks的优势,如函数组件无类实例的`this`问题、自定义Hook便于复用状态逻辑和副作用关注点的分离。并列举了常用的Hooks,如`useState`、`useEffect`、`useContext`等,以及它们的应用场景和作用,如`useEffect`用于管理副作用,`useCallback`和`useMemo`优化性能,`useRef`用于保存变量等。最后,讨论了自定义Hooks在复用状态逻辑方面的价值。
摘要由CSDN通过智能技术生成

Hook 是一些可以让你在函数组件里“钩入” React state 及生命周期等特性的函数。Hook 不能在 class 组件中使用

Hook 使用规则

  • 只能在函数最外层调用 Hook。不可在循环、条件判断或者子函数中调用。
    • 调用useState时,大家都是调用这个函数,React怎么知道应该在渲染的时候给你返回哪个值呢? 其
  • 只能在 React 的函数组件或自定义的 Hook中调用 Hook。不要在其他 JavaScript 函数中调用。

可以使用eslint-plugin-react-hooks来检测,在Webpack中添加配置如下:

  "eslintConfig": {
   
    "extends": "react-app",
    "plugins": [
      "react-hooks"
    ],
    "rules": {
   
      "react-hooks/rules-of-hooks":"error"
    }
  },

Hook如何把调用和组件联系起来的?

React 保持对当先渲染中的组件的追踪。多亏了 Hook 规范,我们得知 Hook 只会在 React 组件中被调用(或自定义 Hook —— 同样只会在 React 组件中被调用)。

每个组件内部都有一个「记忆单元格」列表。它们只不过是我们用来存储一些数据的 JavaScript 对象。当你用 useState() 调用一个 Hook 的时候,它会读取当前的单元格(或在首次渲染时将其初始化),然后把指针移动到下一个。这就是多个 useSta

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Hooks是React 16.8版本引入的一种新特性,它可以让你在函数组件中使用状态(state)和其他React特性,而无需编类组件。通过Hooks,你可以在无需修改组件结构的情况下,复用状态逻辑,并且使组件更加简洁和易于理解。 Hooks提供了一系列的钩子函数,最常用的是useState()和useEffect()。useState()可以在函数组件中声明和使用状态,并且可以通过函数调用来更新状态。例如,你可以使用useState()来创建一个计数器: ``` import React, { useState } from 'react'; const Counter = () => { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); } ``` 在上面的例子中,useState(0)初始化了一个名为count的状态变量,并将其初始值设置为0。setCount是一个用于更新count的函数。每次点击按钮时,我们通过调用setCount来更新count的值。 另一个常用的钩子函数是useEffect(),它用于处理副作用操作,比如订阅数据、网络请求或者手动修改DOM。useEffect()接受两个参数:一个回调函数和一个依赖数组。回调函数将在组件渲染时执行,并且可以返回一个清理函数。依赖数组用于定义在依赖项改变时是否重新运行回调函数。 这只是React Hooks的简单介绍,还有其他很多有用的Hooks,比如useContext()、useReducer()等。Hooks提供了一种更加灵活和直观的方式来管理组件状态和副作用,使得函数组件的编更加简单和可维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值