# React HooK

Hook简介

React 的核心是组件。v16.8 版本之前,组件的标准写法是类(class)。

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

# 类和函数的差异

  • 类(class)是数据和逻辑的封装。 也就是说,组件的状态和操作方法是封装在一起的。如果选择了类的写法,就应该把相关的数据和操作,都写在同一个 class 里面。
  • 函数一般来说,只应该做一件事,就是返回一个值。 如果你有多个操作,每个操作应该写成一个单独的函数。而且,数据的状态应该与操作方法分离。根据这种理念,React 的函数组件只应该做一件事情:返回组件的 HTML 代码,而没有其他的功能。

# 常用钩子函数

下面介绍 React 默认提供的四个最常用的钩子。

React Hooks

  • useState():用于为函数组件引入状态(state)。
  • useContext():在组件之间共享状态。
  • useReducer()
  • useEffect():来引入具有副作用的操作,最常见的就是向服务器请求数据。
 


 
 
 
 











import React, { useState, useEffect } from 'react';

function Example() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    document.title = `You clicked ${count} times`;
  }, [count]); // 仅在 count 更改时更新
  
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

# State Hook

TIP

  • useState 就是一个 Hook,Hook 不能在 class 组件中使用。
  • useState, 通过在函数组件里调用它来给组件添加一些内部 state
  • useState 会返回一对值:当前状态和一个让你更新它的函数,你可以在事件处理函数中或其他一些地方调用这个函数。
  • 它类似 class 组件的 this.setState,但是它不会把新的 state 和旧的 state 进行合并。
  • const [count, setCount] = useState(0);
  • useState 唯一的参数就是初始 state(如上面的计数器是从零开始的)。这个初始 state 参数只有在第一次渲染时会被用到。
  • 数组解构的语法让我们在调用 useState 时可以给 state 变量取不同的名字。

# Effect Hook

TIP

  • 🔴 useEffect 就是一个 Effect Hook,给函数组件增加了操作副作用(数据获取、订阅或者手动修改过 DOM)的能力。
  • 它跟 class 组件中的 componentDidMount、componentDidUpdate 和 componentWillUnmount 具有相同的用途,只不过被合并成了一个 API。
  • 👍 如果某些特定值在两次重渲染之间没有发生变化,你可以通知 React 跳过对 effect 的调用,只要传递数组作为 useEffect 的第二个可选参数即可

# 自定义Hook


# 参考文献

https://zh-hans.reactjs.org/docs/hooks-intro.html

Last Updated: 5/21/2021, 6:01:02 PM