Context API是一种在应用之间传递状态的巧妙方法,而无需使用道具
这上下文API引入该功能是为了允许您在应用中传递状态(并允许状态更新),而无需使用道具。
如果您只有几个级别的孩子要通过,React团队建议坚持使用道具,因为它仍然比Context API复杂得多。
在许多情况下,它使我们避免使用Redux,大大简化了我们的应用程序,还学习了如何使用React。
它是如何工作的?
您使用创建上下文React.createContext()
,它返回一个Context对象。
const { Provider, Consumer } = React.createContext()
然后,您创建一个包装器组件,该组件返回一个提供者组件,然后将要从中访问上下文的所有组件添加为子组件:
class Container extends React.Component {
constructor(props) {
super(props)
this.state = {
something: 'hey'
}
}
render() {
return (
<Provider value={{ state: this.state }}>{this.props.children}</Provider>
)
}
}
class HelloWorld extends React.Component {
render() {
return (
<Container>
<Button />
</Container>
)
}
}
我使用Container作为该组件的名称,因为这将是一个全局提供程序。您还可以创建较小的上下文。
在包装在提供程序中的组件内部,您可以使用消费者利用上下文的组件:
class Button extends React.Component {
render() {
return (
<Consumer>
{context => <button>{context.state.something}</button>}
</Consumer>
)
}
}
您还可以将函数传递到Provider值中,并且使用者将使用这些函数来更新上下文状态:
<Provider value={{
state: this.state,
updateSomething: () => this.setState({something: 'ho!'})}}>
{this.props.children}
</Provider>
/* … */
<Consumer>
{(context) => (
<button onClick={context.updateSomething}>{context.state.something}</button>
)}
</Consumer>
您可以看到此动作在这个小故障。
您可以创建多个上下文,以使您的状态分布在各个组件之间,但可以公开它并使任何所需的组件都可以访问它。
使用多个文件时,可以在一个文件中创建内容,然后将其导入所有使用位置:
//context.js
import React from 'react'
export default React.createContext()
//component1.js
import Context from ‘./context’
//… use Context.Provider
//component2.js
import Context from ‘./context’
//… use Context.Consumer
免费下载我的反应手册
更多反应教程:
- 一个React简单的应用示例:通过API获取GitHub用户信息
- 用React构建一个简单的计数器
- 用于React开发的VS代码设置
- 如何通过React Router将道具传递给子组件
- 使用Electron和React创建一个应用
- 教程:使用React创建电子表格
- 学习React的路线图
- 了解如何使用Redux
- JSX入门
- 样式化的组件
- Redux Saga简介
- React Router简介
- React简介
- 反应组件
- 虚拟DOM
- 反应事件
- 反应状态
- 反应道具
- 反应片段
- React Context API
- 反应PropTypes
- 反应概念:声明式
- React:如何在点击时显示其他组件
- 如何在React JSX内部循环
- 道具与状态在React中
- 您应该使用jQuery还是React?
- 使用React需要知道多少JavaScript?
- 盖茨比介绍
- 如何在React中引用DOM元素
- React中的单向数据流
- 反应高阶组件
- 反应生命周期事件
- 反应概念:不变性
- 反应概念:纯度
- React钩子简介
- create-react-app简介
- 反应概念:组成
- React:演示组件与容器组件
- React中的代码拆分
- 使用React进行服务器端渲染
- 如何安装React
- React中的CSS
- 在React中使用SASS
- 在React中处理表单
- 反应严格模式
- 反应门户
- 反应渲染道具
- 测试React组件
- 如何在React中将参数传递给事件处理程序
- 如何处理React中的错误
- 如何在JSX中返回多个元素
- React中的条件渲染
- 反应,如何将道具转移到子组件
- 如何在React中获取输入元素的值
- 如何使用useState React钩子
- 如何使用useCallback React钩子
- 如何使用useEffect React钩子
- 如何使用useMemo React钩子
- 如何使用useRef React钩子
- 如何使用useContext React钩子
- 如何使用useReducer React钩子
- 如何将您的React应用程序连接到相同来源的后端
- 到达路由器教程
- 如何使用React Developer Tools
- 如何学习React
- 如何调试React应用程序
- 如何在React中呈现HTML
- 如何修复`dangerouslySetInnerHTML`与React中的错误不匹配
- 我如何解决React登录表单状态和浏览器自动填充的问题
- 如何在本地主机上的React应用程序中配置HTTPS
- 如何修复React中的“渲染其他组件时无法更新组件”错误
- 我可以在条件内使用React挂钩吗?
- 将useState与对象一起使用:如何更新
- 如何使用React和Tailwind在代码块中移动
- React,添加到DOM时将焦点放在React中的一个项目上
- 反应,在doubleclick上编辑文本