在爱 context 一次,并结合 useReducer 使用,这次有一点简单

2023-12-20 16:17:21 浏览数 (2)

React 知命境」第 28 篇

在 React 中,props 能够帮助我们将数据层层往下传递。而 context 能够帮助我们将数据跨层级往下传递

context 的概念稍微有一点点多,但是我们在学习的他的时候,只需要将其分为两个部分,就能够轻松掌握

  • 1、如何创建 context 与如何传递数据
  • 2、组件中如何获取数据

context 如何创建与数据如何传递

react 中使用 createContext组件外部创建 context

代码语言:javascript复制
const context = createContext(defaultValue)

context 本身不保存任何信息,他包含了两个引用

context.Provider 用于包裹子组件并传递数据

context.Consumer 用于在子组件中读取数据,不过这个读取方式已经非常少能有用武之地了,基本上都被 useContext 取代了。

一个非常简单的 demo 如下。首先我们一定要明确的把 Provider 当成顶层父组件,因为我们的目标就是把数据从父组件往更低层的子组件传递,因此我们首先要创建父组件

代码语言:javascript复制
import { createContext } from 'react';  

const ThemeContext = createContext('light');

function App() {
  const [theme, setTheme] = useState('light');
  // ...
  return (
    <ThemeContext.Provider value={theme}>
      <Page />
    </ThemeContext.Provider>
  );
}

Provider 通过 value 将定义好的数据传递下去。在子组件 Page 以及他更低层的子组件中,我们都可以使用 useContext 来获取数据

数据如何获取

假如在上面案例的子组件 Page 内部,还有一个更底层次的子组件 Button , 在 Button 中,我们可以通过 useContext 这个 hook 来获取从顶层父组件传递过来的参数

代码语言:javascript复制
function Button() {
  // ✅ Recommended way
  const theme = useContext(ThemeContext);
  return <button className={theme} />;
}

当然,在以前我们也可以通过 Consumer 来获取,不过现在已经不推荐这样使用了

代码语言:javascript复制
function Button() {
  // 


	

0 人点赞