Hook

作者: jancywen | 来源:发表于2022-08-23 20:02 被阅读0次
  1. Hook 是什么?
    Hook 是一个特殊的函数,它可以让你“钩入” React 的特性。

  2. 什么时候用 Hook?
    使用函数组件需要添加 state 时,不用转换成 class 组件,可以再函数组件中使用 Hook。

State Hook

  1. 调用 useState方法的时候做了什么?
    它定义一个 “state 变量”。这是一种在函数调用时保存变量的方式 —— useState 是一种新方法,它与 class 里面的 this.state 提供的功能完全相同。一般来说,在函数退出后变量就会”消失”,而 state 中的变量会被 React 保留。

  2. useState 需要哪些参数?
    useState() 方法里面唯一的参数就是初始 state

  3. useState 方法的返回值是什么?
    返回值为:当前 state 以及更新 state 的函数

const [count, setCount] = useState(0);

这里的方括号在 JavaScript 语法叫数组解构。它意味着我们同时创建了 countsetCount 两个变量,count 的值为 useState 返回的第一个值,setCount 是返回的第二个值。

Effect Hook

可以把 useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个函数的组合。

不需要清除的 Effect

useEffect(() => {
    document.title = `You clicked ${count} times`;
});
  1. useEffect 做了什么?
    通过使用这个 Hook,告诉 React 组件需要在渲染后执行某些操作。React 会保存你传递的函数(我们将它称之为 “effect”),并且在执行 DOM 更新之后调用它。在这个 effect 中,我们设置了 document 的 title 属性,不过我们也可以执行数据获取或调用其他命令式的 API。

  2. 为什么在组件内部调用 useEffect?
    Hook 使用了 JavaScript 的闭包机制,将 useEffect 放在组件内部让我们可以在 effect 中直接访问 count state 变量(或其他 props)

  3. useEffect 会在每次渲染后都执行吗?
    是的,默认情况下,它在第一次渲染之后和每次更新之后都会执行。

需要清除的 effect

给 effect 返回一个函数,React 将会在执行清除操作时调用它。

  useEffect(() => {
    return () => {
    ...
    };
  });
  • 为什么每次更新的时候都要运行 Effect
    因为 useEffect 默认就会处理。它会在调用一个新的 effect 之前对前一个 effect 进行清理。
  • 通过跳过 Effect 进行性能优化
    如果某些特定值在两次重渲染之间没有发生变化,可以通知 React 跳过对 effect 的调用,只要传递数组作为 useEffect 的第二个可选参数即可。
useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); // 仅在 count 更改时更新

使用此优化方式,请确保数组中包含了所有外部作用域中会随时间变化并且在 effect 中使用的变量,否则你的代码会引用到先前渲染中的旧变量。参阅文档,了解更多关于如何处理函数以及数组频繁变化时的措施内容。
如果想执行只运行一次的 effect(仅在组件挂载和卸载时执行),可以传递一个空数组([])作为第二个参数。

注意:Hook 就是 JavaScript 函数。只能在 React 的函数组件中调用 Hook。并且只能在函数最外层调用 Hook。

相关文章

  • 堆利用的手法:

    malloc_hook realloc_hook+free_hook free_hook unsorted_bin...

  • hook原理小结

    常用的hook方式主要有导入表hook、导出表hook和inline hook三种。 一,导入表hook 首先需要...

  • 常用油猴Hook插件

    hook cookie hook 过debugger

  • react hook 状态与操作封装

    统一hook 数组hook

  • 遍历hook Dex中的类

    创建DexFile 遍历拿出所有类名 找到类对象,进行hook hook构造函数 hook方法 打印hook方法中的日志

  • frida native hook

    本篇介绍 frida 也支持hook native,本篇看下如何hook native hook native函数...

  • HOOK

    HOOK 一、HOOK概述 HOOK(钩子) 其实就是改变程序执行流程的一种技术的统称! 二、iOS中HOOK技术...

  • Windows Hook

    Hook 关于Hook 1.1什么是Hook 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可...

  • Android 进阶解密阅读笔记17

    Hook 技术 先来说我看完这章节对 Hook 的理解。Hook 关键在于找到合适的 Hook 点(也就是需要代理...

  • off the hook表示“摆脱钩子”?

    Off the hook啥意思? Off the hook“摆脱困境”,hook表示“钩子”,off the ho...

网友评论

      本文标题:Hook

      本文链接:https://www.haomeiwen.com/subject/cdwggrtx.html