一天一个react18.2.0 api——createContext

22 阅读1分钟

api使用介绍

1,使用方式一

import React, { createContext } from 'react'

import ReactDOM from 'react-dom/client'

const Context = createContext()
function Child() {
  return <Context.Consumer>{value => <div>{value}</div>}</Context.Consumer>
}
function App() {
  return (
    <Context.Provider value="Hello World this is child">
      <Child />
    </Context.Provider>
  )
}
ReactDOM.createRoot(document.getElementById("root")).render(<App />);

2,使用方式二

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

import ReactDOM from 'react-dom/client'

const Context = createContext()
function Child() {
  const value = useContext(Context)
  return <div>{value}</Cdiv>
}
function App() {
  return (
    <Context.Provider value="{name: 'this is child'}">
      <Child />
    </Context.Provider>
  )
}
ReactDOM.createRoot(document.getElementById("root")).render(<App />);

综上所述,createContext就是一个小型的状态容器。你可以创建一个状态容器,然后通过Context.Provider给状态容器里面添值,然后在Context.Consumer或者useContext里面使用这个值。

createContext源码分析

我觉得createContext的源码逻辑应该不难理解。其核心,我猜就是构建一个容器出来,然后,通过给conetxt.provider赋值,从而改变容器的状态。然后在context.consumer中,在渲染的时候,特殊处理容器里面的值,从而可以让context.consumer里面传参的逻辑走得通。usecontext就更简单了,直接把context里面的值给取出来。,并保持和context里面的值的同步。