若组件多层包裹 且外层属性或方法要传递给内层的组件 则传递会变得比较麻烦 比如: 此时 可以使用Context特性 在想要共享属性或方法的父组件里提供一个 像这样: 当然 Context使用的前提是必须为父子关系组件 若是平级的组件 则无此特性
Context特性
import React from 'react'; export default class Parent extends React.Component { constructor(props) { super(props); this.state = { mycolor:"red" } } render() { return <div> <h1>I'm Parent</h1> <Son mycolor={this.state.mycolor}></Son> </div> } } class Son extends React.Component { render() { return <div> <h3>I'm Son</h3> <Grandson mycolor={this.props.mycolor}></Grandson> </div> } } class Grandson extends React.Component { render() { return <div> <h5 style={{color:this.props.mycolor}}>I'm Grandson</h5> </div> } }
在父组件上直接共享一个Context对象 然后内层的组件无需逐层传递数据了 想要使用 直接从Context获取即可getChildContext()
方法(方法名不能改变)
在里面返回一个对象 该对象即为要共享给所有子孙组件的数据
然后使用childContextTypes
属性进行属性校验
在要使用数据的子组件里使用contextTypes
属性进行属性校验 然后用this.context.属性名
获取属性即可import React from 'react'; import ReactPropTypes from 'prop-types' // 属性校验包 export default class Parent extends React.Component { constructor(props) { super(props); this.state = { mycolor:"red" } } // 在父组件中定义一个function 固定名称getChildContext 且内部必须返回一个对象 // 该对象即为要共享给所有子孙组件的数据 getChildContext() { return { mycolor:this.state.mycolor } } // 属性校验 规定传给子孙组件的数据类型 static childContextTypes={ mycolor:ReactPropTypes.string } render() { return <div> <h1>I'm Parent</h1> <Son></Son> </div> } } class Son extends React.Component { render() { return <div> <h3>I'm Son</h3> <Grandson></Grandson> </div> } } class Grandson extends React.Component { // 属性校验 校验从父组件传来的数据类型 static contextTypes={ mycolor:ReactPropTypes.string // 若子组件要使用父组件通过Context共享的数据 那么在使用前一定要进行数据校验 } render() { return <div> <h5 style={{color:this.context.mycolor}}>I'm Grandson</h5> </div> } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算