📜  React Hooks(1)

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

React Hooks介绍

React Hooks是一种React自16.8版本引入的功能,它允许您在不编写类的情况下使用state和其他React功能。

Hooks是用于React函数组件的函数,它提供了对setState、context、lifecycle和其他React功能的访问和状态管理。使用Hooks,您可以轻松地在React组件中使用状态、Props和其他React功能,而无需编写或继承类。

常用Hooks
useState

useState是最常用的Hook之一,它允许您在函数组件中使用state。

import React, { useState } from 'react';

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

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

useEffect是另一个常用的Hook,它允许您在组件渲染后执行副作用代码。

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

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

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

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

useContext允许您访问React context,这是一种在应用程序中共享数据的方法。

import React, { useContext } from 'react';
import MyContext from './MyContext';

function MyComponent() {
  const { value } = useContext(MyContext);

  return <p>{value}</p>;
}
useReducer

useReducer是另一种管理状态的Hook,它与Redux类似,允许您使用action更新状态。

import React, { useReducer } from 'react';

const initialState = { count: 0 };

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

function Counter() {
  const [state, dispatch] = useReducer(reducer, initialState);

  return (
    <div>
      <p>You clicked {state.count} times</p>
      <button onClick={() => dispatch({ type: 'increment' })}>
        Click me
      </button>
      <button onClick={() => dispatch({ type: 'decrement' })}>
        Click me
      </button>
    </div>
  );
}
自定义Hooks

自定义Hooks允许您重用代码,将状态逻辑提取到可重用的函数中。

import { useState, useEffect } from 'react';

function useWindowWidth() {
  const [width, setWidth] = useState(window.innerWidth);

  useEffect(() => {
    const handleResize = () => setWidth(window.innerWidth);
    window.addEventListener('resize', handleResize);
    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return width;
}

function MyComponent() {
  const width = useWindowWidth();

  return <p>Window width is {width}</p>;
}
结论

React Hooks是一种强大且易于使用的功能,在React应用程序中管理状态和其他副作用十分方便。它们使React函数组件的编写变得更加简洁和直观,同时也提高了应用程序的可重用性和可维护性。