-
1、在某些场景下,你想在整个组件树中传递数据,但却不想手动地在每一层传递属性。你可以直接在
React
中使用强大的contextAPI
解决上述问题 -
2、在一个典型的
React
应用中,数据是通过props
属性自上而下(由父及子)进行传递的,但这种做法对于某些类型的属性而言是极其繁琐的(例如:地区偏好,UI
主题),这些属性是应用程序中许多组件都需要的。Context
提供了一种在组件之间共享此类值的方式,而不必显式地通过组件树的逐层传递props
-
3、使用过
express
或者koa
框架的就会经常使用到上下文来在整个项目中传递数据的。 -
本文中介绍
react
中几种常见的定义与使用上下文的方式,在react
的生态圈中redux
,react-router-dom
等库中都使用到上下文来传递数据,理解好react
上下文对今后看源码都有好处的。
二、在类组件中使用上下文的步骤
-
1、创建一个上下文(多文件的情况下单独使用一个文件)
import React, { Component } from 'react' // 创建一个上下文 const ColorContext = React.createContext(); 复制代码
-
2、在根组件中使用上下文的.
Provider
注入,需要传递的一个vaule
的属性(需要传递到下面子组件的数据,子组件只获得到传递的数据)export default class ContextComponents1 extends Component { constructor(props) { super(props); this.state = { color: '#333', } } changeColor = (color) => { this.setState({ color }); } render() { const { color } = this.state; return ( <ColorContext.Provider value={{ color, changeColor: this.changeColor }}> {/* 只传递一个color和一个changeColor方法,子组件只能从上下文中获得到这两个属性/方法 */} <Header /> <button onClick={() => this.changeColor('yellow')}>黄色</button> <button onClick={() => this.changeColor('green')}>绿色</button> </ColorContext.Provider> ) } } 复制代码
-
3、在子组件中使用上下文
class Header extends Component { // 如果子组件中需要使用上下文就定义该行 static contextType = ColorContext; render() { console.log(this.context); // 可以获取到根组件中value中传递过来的color和changeColor方法 return ( <> <h1 style={{ color: this.context.color }}>我是header组件</h1> <Title /> </> ) } } 复制代码
三、函数组件中使用上下文的方式
-
1、定义上下文
import React, { Component } from 'react'; const ColorContext = React.createContext(); 复制代码
-
2、定义根组件
export default class ContextComponent2 extends Component { state = { color: '#333', } changeColor = (color) => { this.setState({ color }) } render() { const { color } = this.state; return ( <ColorContext.Provider value={{ color }}> <Header name={'header'} type={1} /> <button onClick={() => this.changeColor('yellow')}>黄色</button> <button onClick={() => this.changeColor('green')}>绿色</button> </ColorContext.Provider> ) } } 复制代码
-
3、在函数组件中使用
function Header(props) { console.log(props, 'props属性') return ( <ColorContext.Consumer> { value => { console.log(value, '上下文数据') return (<h1 style={{ color: value.color }}>我是header组件</h1>) } } </ColorContext.Consumer> ) } 复制代码
四、使用 hooks
新属性创建上下文
-
1、创建一个上下文
import React, { Component, useContext, useState } from 'react'; const ColorContext = React.createContext(); 复制代码
-
2、根组件
export default () => { let [color, setColoer] = useState('#333'); return ( <ColorContext.Provider value={{ color }}> <Header /> <button onClick={() => setColoer('yellow')}>黄色</button> <button onClick={() => setColoer('green')}>绿色</button> </ColorContext.Provider> ) } 复制代码
-
3、在子组件中使用
function Header(props) { let { color } = useContext(ColorContext); console.log(color, '上下文'); return ( <> <h1 style={{ color: color }}>我是header组件</h1> </> ) } 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Inside Larry's and Sergey's Brain
Richard Brandt / Portfolio / 17 Sep 2009 / USD 24.95
You’ve used their products. You’ve heard about their skyrocketing wealth and “don’t be evil” business motto. But how much do you really know about Google’s founders, Larry Page and Sergey Brin? Inside......一起来看看 《Inside Larry's and Sergey's Brain》 这本书的介绍吧!