// 1.使用context就需要引入,createContext
import React,{Component, createContext} from 'react';
import {render} from 'react-dom'
// 2.创建createContext方法
// console.log(createContext()) //输出Provider()提供者与Consumer()参数接收者方法
const {
Provider,
Consumer:ConsumerConsumer
} = createContext()
// 3.创建用于保存数据的一个空的类组件
class CountProvider extends Component {
// 5.创建state,设定参数
constructor() {
super()
this.state = {
count : 100
}
}
// 10.创建方法
incrementCount = () => {
this.setState({
count: this.state.count + 1
})
}
decrementCount = () => {
this.setState({
count : this.state.count -1
})
}
render() {
return (
// 用Provider把props.children包括起来
// 6.Provider接收一个参数value是一个对象,也可以传递方法
<Provider value={{
count : this.state.count,
onIncrementCount : this.incrementCount,
onDecrementCount : this.decrementCount
}}>
{this.props.children}
</Provider>
)
}
}
class CountButton extends Component {
render() {
// console.log(this.props)
return(
<ConsumerConsumer>
{/* <button>{ this.props.children }</button> */}
{
({onIncrementCount,onDecrementCount}) => {
{/* console.log(onIncrementCount,onDecrementCount) */}
const handler = this.props.type === 'increment' ? onIncrementCount : onDecrementCount
{/* console.log(this.props.type) */}
return(
<button onClick={handler}>{ this.props.children }</button>
)
}
}
</ConsumerConsumer>
)
}
}
class Counter extends Component {
render() {
return (
// 7.接收参数,接收参数的话就需要改成JS,里面接收的是一个方法,不然会报错
<ConsumerConsumer>
{/* <span>{this.state.data}</span> */}
{/* 8.解构赋值出定义的参数 */}
{
({count}) => {
return(
<span>{count}</span>
)
}
}
</ConsumerConsumer>
)
}
}
class App extends Component {
render() {
return (
<>
<CountButton type ='decrement'>-</CountButton>
<Counter/>
<CountButton type ='increment'>+</CountButton>
</>
)
}
}
// 4.创建的类组件把<App>组件给包括起来
render(
<CountProvider>
<App />
</CountProvider>
,document.getElementById('root')
)
react-contex案例
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- react-hot-loader 和 webpack-dev-server有什么不同? 他们最大的区别是react...
- 今天的知识点不难,主要考验大家伙对代码的阅读能力啦!即将要接触的知识点有&&运算符、元素变量、三目运算符与Reac...
- 本文首发于博客:http://www.goody365.com/?p=39 第一节,我们用React Naviga...
- 一 摘要 上一篇文章,介绍了如何在MAC电脑上搭建React Native运行环境,环境搭建好了,接下来这篇给大家...
- 项目地址: https://github.com/ddvdd008/react-redux/tree/master...