react中的context是什么呢
Context 通过组件树提供了⼀个传递数据的⽅法,从⽽避免了在每⼀个层级⼿动的传递 props 属性。
⽂档也没具体给出context到底是什么,⽽是告诉我们context能⼲什么,也就是说,如果我们不想通过props实现组件树的逐层传递
数据,则可以使⽤context实现跨层级进⾏数据传递!
![](https://img.haomeiwen.com/i12598332/147a5bc2e63f8d00.png)
创建Context,
ContextData.jsx ,通过 Provider 进行数据传递
import React, { Component } from 'react'
// 创建 Context 并导出
export const Context = React.createContext()
export class ContextData extends Component {
constructor(props) {
super(props)
this.state = {
users: [
{
name: '小明',
age: 18,
sex: '男',
},
{
name: '小红',
age: 16,
sex: '女',
},
{
name: '小王',
age: 20,
sex: '男',
},
],
}
}
render() {
return (
<Context.Provider value={this.state}>
{this.props.children}
</Context.Provider>
)
}
}
Middle.jsx
import React from 'react'
import Foo from './Foo'
import Bar from './Bar'
function Middle() {
return (
<div>
<Foo></Foo>
<Bar></Bar>
</div>
)
}
export default Middle
Foo.jsx, 类组件
方式一: 通过 Consumer 里面{放一个函数} 来获得 Context 的数据
import React, { Component } from 'react'
import {Context} from './ContextData'
export class Foo extends Component {
render() {
return (
<Context.Consumer>
{appContext=><div>Foo:{JSON.stringify(appContext.users[0])}</div>}
</Context.Consumer>
)
}
}
export default Foo
Bar.jsx 函数式组件
方式二: 通过 useContext 传入创建的 Context
import React from 'react'
import {Context} from './ContextData'
function Bar() {
const appContext = React.useContext(Context)
return (
<div>
<p>Bar: {JSON.stringify(appContext.users[1])}</p>
</div>
)
}
export default Bar
Baz.jsx 类组件
方式三: 通过静态属性
static contextType = Context,
const appContext = this.context;
import React, { Component } from 'react'
import {Context} from './ContextData'
export default class Baz extends Component {
static contextType = Context
render() {
const appContext = this.context;
return (
<div>
{/* <p>这是一个懒加载...</p> */}
Baz: {JSON.stringify(appContext.users[2])}
</div>
)
}
}
浏览器显示结果
![](https://img.haomeiwen.com/i12598332/99b9ea0c7fa5e7b2.png)
网友评论