// 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...