React 之 主要的内置 Hook(十)

发布于:2024-05-10 ⋅ 阅读:(32) ⋅ 点赞:(0)

React 重要的主要内置 Hook 包括以下几个:

1. useState

用于在函数组件中添加状态。它返回一个状态变量和一个更新该状态的函数。这使得函数组件能够像类组件一样具有状态。

useState使用代码栗子:

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>  
  );  
}

2. useEffect

用于在函数组件中执行副作用操作,比如数据获取、订阅、手动修改 DOM 等。它的工作方式与类组件中的
componentDidMount、componentDidUpdate 和 componentWillUnmount 生命周期方法类似。

useEffect使用代码栗子:

import React, { useState, useEffect } from 'react';  
  
function Example() {  
  const [count, setCount] = useState(0);  
  
  useEffect(() => {  
    // 类似于componentDidMount和componentDidUpdate:  
    console.log(`You clicked ${count} times`);  
  
    // 返回一个清理函数,类似于componentWillUnmount:  
    return () => {  
      console.log('Component will unmount');  
    };  
  }, [count]); // 依赖项数组,当依赖项发生变化时,useEffect会重新执行  
  
  return (  
    <div>  
      <p>You clicked {count} times</p>  
      <button onClick={() => setCount(count + 1)}>Click me</button>  
    </div>  
  );  
}

3. useContext

它使得你可以无需明确地逐层通过 props 来传递数据,而是在组件之间的任何位置直接访问 React 的 Context
值。useContext 接收一个 React Context 对象(React.createContext 的返回值)并返回该
Context 的当前值。

useContext使用代码栗子:

import React, { createContext, useContext, useState } from 'react';  
  
// 创建一个 Context 对象  
const ThemeContext = createContext('light');  
  
// 使用 ThemeContext 的组件  
function ThemedButton() {  
  // 使用 useContext 来获取 ThemeContext 的值  
  const theme = useContext(ThemeContext);  
  
  return (  
    <button style={{ backgroundColor: theme }}>  
      I am styled by theme context!  
    </button>  
  );  
}  
  
// 提供 ThemeContext 值的组件  
function App() {  
  // 声明一个状态变量来作为主题  
  const [theme, setTheme] = useState('light');  
  
  // 一个处理函数,用于切换主题  
  const toggleTheme = () => {  
    setTheme(theme === 'light' ? 'dark' : 'light');  
  };  
  
  // 使用 ThemeContext.Provider 来包裹组件,并提供主题值  
  return (  
    <div>  
      <button onClick={toggleTheme}>Toggle Theme</button>  
  
      <ThemeContext.Provider value={theme}>  
        <ThemedButton />  
      </ThemeContext.Provider>  
    </div>  
  );  
}  
  
export default App;

网站公告

今日签到

点亮在社区的每一天
去签到