React 学习第三天

107 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

组件通讯

1.组件的props

  • 组件是封闭的,要接收外部数据应该通过props来实现

  • props的作用:接收传递给组件的数据

  • 传递数据:给组件标签添加属性

    <Hello name="jack" age={19}></Hello>
    
    fucntion Hello(props){
        console.log(props)
        return(
        	<div>接收到数据:{props.name}</div>
        )
    }
    
  • 可以给组件传递任意类型的数据

  • props是只读的对象,只能读取属性的值,无法修改对象

  • 注意:使用类组件时,如果写了构造函数,应该将props传递给super(props),否则无法在构造函数中获取props

2.组件通讯的三种方式

  • 父组件 -> 子组件

    使用props接收父组件传递的数据

  • 子组件 -> 父组件

    /*
    1. 父组件提供一个回调函数
    */
    
    class Parend extends React.Component{
        getChildMsg = (msg) => {
            console.log('接收到的子组件参数:',msg)
        }
        render(){
            return (
            	<div>
                	子组件:<Child getMsg={this.getChildMsg} />
                </div>
            )
        }
    }
    
  • 兄弟组件

    /*
    1. 将共享状态提升到最近的公共父组件中,由公共父组件管理这个状态
    (偷懒省略一点...)
    */
    

3.Context

跨组件传递数据

/*
1. 调用React.createContext() 创建 Provider(提供数据)和Consumer(消费数据)两个组件.
2. 使用Provider组件作为父节点
3. 设置value属性,表示要传递的数据
*/

const {Provider, Consumer} = React.createContext()

<Provider value="pink">
	<div className="App">
    	<Child1 />
    </div>
</Provider>
    
<Child1>
	<Consumer>
        {data=><span>{data}</span>}
    </Consumer>    
</Child1>

4.children 属性

表示组件标签的子节点,当组件标签有子节点时,props就会有该属性

5.props校验

  • props 是外部传入的参数,无法保证组件使用者传入什么格式的数据

  • props校验,允许创建组件时,指定props的类型、格式等

    App.propTypes = {
        colors: PropTypes.array
    }
    
  • 使用需要安装包: npm i prop-types

  • 常见类型:array、bool、func、number、object、string

  • React元素类型:element

  • 必填项:isRequired

  • 特定结构的对象:shape({})

6.props默认值

  • 设置props的默认值,App.defaultProps = { colName : defaultValue }