📜  你应该知道的关于 React Hooks 的事情(1)

📅  最后修改于: 2023-12-03 15:36:25.285000             🧑  作者: Mango

你应该知道的关于 React Hooks 的事情

在 React 16.8 版本中,React 引入了 Hooks 的概念,它允许开发者在不编写 class 组件的情况下使用 state 以及其他 React 的特性,从而更加方便的开发 React 应用。

本文将为大家介绍一些关于 React Hooks 的重要内容:

useState

useState 是 React 提供的最基本的 Hook,它允许函数组件中使用 state。useState 接收一个初始值,返回一个数组,数组的第一个值是当前 state,第二个值是更新这个 state 的函数。

import React, {useState} from 'react';

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

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

上述代码中,在函数组件 Example 中使用了 useState。我们通过解构赋值获取了 count 和 setCount,其中 count 是当前的 state,setCount 是更新 count 的函数。setCount 接受一个新的值,并用这个新值来更新 count。

useEffect

useEffect 是 React Hook 中用于处理副作用的 Hook。它接收一个函数和一个依赖项数组,并在组件渲染或依赖项变化时执行。

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

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

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  }, [count]);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

上述代码中,在函数组件 Example 中使用了 useEffect。我们通过给 useEffect 提供第二个参数 [count] 来让 useEffect 在 count 变化时执行。这里我们利用 useEffect 来更新文档的标题。

useContext

useContext 是 React Hook 中使用 context 的 Hook。它接收一个 context 对象并返回 context 对象的当前值。

import React, {createContext, useContext} from 'react';

const CountContext = createContext();

function Example() {
  const count = useContext(CountContext);

  return <div>{count}</div>;
}

上述代码中,我们定义了一个 CountContext,用于在组件树之间传递 count 值。在 Example 中使用 useContext 来获取当前 count 值。

useRef

useRef 是 React Hook 中获取 DOM 元素或者保存变量的 Hook。它可以在渲染周期之间保留可变的值,并且在每次渲染时返回相同的 ref 对象。

import React, {useRef} from 'react';

function Example() {
  const inputRef = useRef(null);

  const handleClick = () => {
    inputRef.current.focus();
  };

  return (
    <div>
      <input type="text" ref={inputRef} />
      <button onClick={handleClick}>Focus the input</button>
    </div>
  );
}

上述代码中通过 useRef 获取了 input 元素,并在 handleClick 函数中聚焦该元素。

useReducer

useReducer 是 React Hook 中使用 reducer 的 Hook,它接收一个 reducer 函数和一个初始值作为参数,返回一个数组,数组的第一个值是当前 state,第二个值是更新 state 的 dispatch 函数。

import React, {useReducer} from 'react';

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return state + 1;
    case 'decrement':
      return state - 1;
    default:
      throw new Error();
  }
}

function Example() {
  const [count, dispatch] = useReducer(reducer, 0);

  return (
    <>
      Count: {count}
      <button onClick={() => dispatch({type: 'increment'})}>+</button>
      <button onClick={() => dispatch({type: 'decrement'})}>-</button>
    </>
  );
}

上述代码中,我们定义了一个 reducer 函数,用来更新 state 的值。在 Example 中使用 useReducer 获取了当前的 count 和 dispatch 函数,然后在按钮的点击事件中分别调用 dispatch 函数。

useCallback

useCallback 是 React Hook 中用于优化组件渲染性能的 Hook。它接收一个函数和一个依赖项数组,并返回一个 memoized(记忆化)版本的函数。当依赖项没有改变时,useCallback 返回缓存的函数。

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

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

  const handleClick = useCallback(() => {
    setCount(count + 1);
  }, [count]);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={handleClick}>
        Click me
      </button>
    </div>
  );
}

上述代码中,我们使用 useCallback 创建了一个 memoized 版本的 handleClick 函数。当 count 改变时,handleClick 函数也会被更新。

以上就是你应该知道的关于 React Hooks 的一些事情。通过使用这些 Hooks,我们可以更加方便地使用 React,提高开发效率并且优化组件的性能。