• hooks 的定义


    目录

    1.hooks 的定义

     2.命名规范

    3.hooks玩法

    3.1 环境和版本

    3.2  react 的 Hooks 写法

    3.3 vue 的 Hooks 写法


    1.hooks 的定义

    "hooks" 直译是 “钩子”,它并不仅是 react,甚至不仅是前端界的专用术语,而是整个行业所熟知的用语。通常指:

    系统运行到某一时期时,会调用被注册到该时机的回调函数。

    比较常见的钩子有:windows 系统的钩子能监听到系统的各种事件,浏览器提供的 onloadaddEventListener 能注册在浏览器各种时机被调用的方法。

    以上这些,都可以被称一声 "hook"。

    但是很显然,在特定领域的特定话题下,hooks 这个词被赋予了一些特殊的含义。

    1. react@16.x 之前,当我们谈论 hooks 时,我们可能谈论的是“组件的生命周期”
    2. 但是现在,以 react 为例hooks 是:一系列以 “use” 作为开头的方法,它们提供了让你可以完全避开 class式写法,在函数式组件中完成生命周期、状态管理、逻辑复用等几乎全部组件开发工作的能力。(一系列方法,提供了在函数式组件中完成开发工作的能力。
      1. import { useState, useEffect, useCallback } from 'react';
      2. // 比如以上这几个方法,就是最为典型的 Hooks
    3. 而在 vue 中, hooks 的定义可能更模糊:在 vue 组合式API里,以 “use” 作为开头的,一系列提供了组件复用、状态管理等开发能力的方法。
      1. import { useSlots, useAttrs } from 'vue';
      2. import { useRouter } from 'vue-router';
      3. // 以上这些方法,也是 vue3 中相关的 Hook!

     2.命名规范

    在 react 官方文档里,对 hooks 的定义和使用提出了 “一个假设、两个只在” 核心指导思想

    一个假设: 假设任何以 「use」 开头并紧跟着一个大写字母的函数就是一个 Hook

    第一个只在: 只在 React 函数组件中调用 Hook,而不在普通函数中调用 Hook。(Eslint 通过判断一个方法是不是大坨峰命名来判断它是否是 React 函数)

    第二个只在: 只在最顶层使用 Hook,而不要在循环,条件或嵌套函数中调用 Hook。

    因为是约定,因而 useXxx 的命名并非强制,你依然可以将你自定义的 hook 命名为 byXxx 或其他方式,但不推荐。

    因为约定的力量在于:我们不用细看实现,也能通过命名来了解一个它是什么。

    3.hooks玩法

    3.1 环境和版本

    在 react 项目中, react 的版本需要高于 16.8.0

    而在 vue 项目中, vue3.x 是最好的选择,但 vue2.6+ 配合 @vue/composition-api,也可以开始享受“组合式API”的快乐。

    3.2  react 的 Hooks 写法

    因为 react Hooks 仅支持“函数式”组件,因此需要创建一个函数式组件 my-component.js

    1. // my-component.js
    2. import { useState, useEffect } from 'React'
    3. export default () => {
    4. // 通过 useState 可以创建一个 状态属性 和一个赋值方法
    5. const [ name, setName ] = useState('')
    6. // 通过 useEffect 可以对副作用进行处理
    7. useEffect(() => {
    8. console.log(name)
    9. }, [ name ])
    10. // 通过 useMemo 能生成一个依赖 name 的变量 message
    11. const message = useMemo(() => {
    12. return `hello, my name is ${name}`
    13. }, [name])
    14. return <div>{ message }</div>
    15. }

    3.3 vue 的 Hooks 写法

    vue 的 Hooks 写法依赖于 组合式API,因此本例采用 <script setup> 来写:

    1. <template>
    2. <div>
    3. {{ message }}
    4. </div>
    5. </template>
    6. <script setup>
    7. import { computed, ref } from 'vue'
    8. // 定义了一个 ref 对象
    9. const name = ref('')
    10. // 定义了一个依赖 name.value 的计算属性
    11. const message = computed(() => {
    12. return `hello, my name is ${name.value}`
    13. })
    14. </script>

    很明显,vue 组合式API里完成 useState 和 useMemo 相关工作的 API 并没有通过 useXxx 来命名,而是遵从了 Vue 一脉相承而来的 ref 和 computed

  • 相关阅读:
    据采集的三种方式-如何获取数据
    Redis持久化策略RDB与AOF
    STM32物联网项目-GPRS模块介绍
    Redis常见问题的解决方案(缓存穿透/缓存击穿/缓存雪崩/数据库缓存数据不一致)
    【Android 逆向】ART 函数抽取加壳 ③ ( 禁用 dex2oat 操作 HOOK 点介绍 | 集成 InLineHook )
    CTFHub | 过滤空格
    基于Java毕业设计学校图书资源交易平台源码+系统+mysql+lw文档+部署软件
    ORACLE错误提示概述
    如何在React中监听键盘事件
    2022 11月24 Ridge/LASSO Regression学习笔记
  • 原文地址:https://blog.csdn.net/sunnyjingqi/article/details/125549912