react新更新的context传递数据

栏目: IOS · Android · 发布时间: 4年前

内容简介:看到网上都是老版的context,发一篇最新的context的使用及小例子。Context接收一个

看到网上都是老版的context,发一篇最新的context的使用及小例子。

Context 通过组件树提供了一个传递数据的方法,从而避免了在每一个层级手动的传递 props 属性。在一个典型的 React 应用中,数据是通过 props 属性由上向下(由父及子)的进行传递的,但这对于某些类型的属性而言是极其繁琐的(例如:地区偏好,UI主题),这是应用程序中许多组件都所需要的。 Context 提供了一种在组件之间共享此类值的方式,而不必通过组件树的每个层级显式地传递 props 。

引入

const {Provider, Consumer} = React.createContext(defaultValue);
  1. 创建一对  { Provider, Consumer } 。当 React 渲染 context 组件 Consumer 时,它将从组件树的上层中最接近的匹配的 Provider 读取当前的 context 值。如果上层的组件树没有一个匹配的 Provider,而此时你需要渲染一个 Consumer 组件,那么你可以用到  defaultValue  。这有助于在不封装它们的情况下对组件进行测试。
  2. defaultValue可以书写默认传递的值

Provider

<Provider value={/* some value */}>

接收一个 value 属性传递给 Provider 的后代 Consumers。一个 Provider 可以联系到多个 Consumers。Providers 可以被嵌套以覆盖组件树内更深层次的值。

Consumer

<Consumer>
  {value => /* render something based on the context value */}
</Consumer>

接收一个 函数作为子节点. 函数接收当前 context 的值并返回一个 React 节点。传递给函数的 value 将等于组件树中上层 context 的最近的 Provider 的  value 属性。如果 context 没有 Provider ,那么  value 参数将等于被传递给  createContext() 的  defaultValue

代码小例:

import React,{Component} from 'react'
const {Provider, Consumer} = React.createContext()
class Father extends Component{
    constructor (props){
        super(props)
        this.state={
            money:25
        }
    }
    render(){
        return (
            <Provider value={this.state}>
                <div>
                <h2>爸爸的钱:{this.state.money}</h2>
                <A></A>
            </div>
            </Provider>  
        )
    }
}
class A extends Component{
    render(){
        return (
            <Consumer>
                {value=><Son  value={value} ></Son>}
            </Consumer>
        )
    }
}
class Son extends Component{
    render(){
        console.log(this.props.value.money)
        return(
            <div>
                {this.props.value.money}
            </div>
        )
    }
}
export default Father

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-05/158791.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

别怕,Excel VBA其实很简单(第2版)

别怕,Excel VBA其实很简单(第2版)

Excel Home / 北京大学出版社 / 2016-7 / 59.00元

对于大部分没有编程基础的职场人士来说,在学习VBA时往往会有很大的畏难情绪。本书正是针对这样的人群,用浅显易懂的语言和生动形象的比喻,并配合大量插画,对Excel中看似复杂的概念和代码,从简单的宏录制、VBA编程环境和基础语法的介绍,到常用对象的操作与控制、执行程序的自动开关—对象的事件、设计自定义的操作界面、调试与优化编写的代码,都进行了形象的介绍。 本书适合那些希望提高工作效率的职场人士......一起来看看 《别怕,Excel VBA其实很简单(第2版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具