context
在开发中,父组件可能需要通过多层中间组件将 props 传递给某个子孙组件,这个传递 props 的过程就会变得十分冗长
context
可以在组件树中不需要props 传递数据,而是将数据直达所需的组件
context
可以让父组件为其内部的整个组件树人提供数据
使用context
使用context
需要三个步骤:
- 创建一个
context
- 在需要数据的组件中使用创建的
context
- 在指定数据的组件中提供
context
创建一个context
新建一个 js 文件,在其中创建constext
并导出他
使用createContext()
来创建一个 context,需要给他传入一个默认值
1 | import { createContext } from "react"; |
使用context
在需要用到数据的组件中,引入useContext
Hook 以及 创建的context
1 | import { useContext } from 'react'; |
提供context
在父组件中使用context provider
将子组件包裹起来,就可以提供context
给他们
1 | import { useState } from 'react'; |
这告诉 React:“如果在Parent
组件中的任何子组件请求MyContext
,给他们这个name
。”
组件会使用 UI 树中在它上层最近的那个MyContext.Provider
传递过来的值。
useContext
语法:const value = useContext(SomeContext)
SomeContext
就是先前用createContext
创建的 context,context 本身不包含信息,它只代表你可以提供或从组件中读取的信息类型。
返回值
useContext
为调用它的组件返回 context 的值。它的返回值被确定为传递给树中调用组件上方最近的SmeContext.Provider
的value
。
如果没有这样的 provider,那么返回值将会是为创建该 context 传递给createContext
的defaultValue
。返回的值始终是最新的,如果 context 发生变化,React 会自动重新渲染读取 context 的组件。