ReactNote04:组件通信方式

组件间的通信方式

1. 父组件传递信息给子组件

先看React官网的一句话:当 React 元素为用户自定义组件时,它会将 JSX 所接收的属性(attributes)以及子组件(children)转换为单个对象传递给组件,这个对象被称之为 “props”。

以下例子说明了父组件传递信息给子组件的方式是:在父组件的子组件中写形参的时候,React会将子组件接受到的属性转换为props对象传递给组件,所以渲染子组件的时候就可以使用props里面的数据了。函数组件同理。

import React, { Component } from 'react'
class Son extends Component {
    constructor(props) {
        super(props);
        this.state = {
        }
    }
    render() {
        // 为什么这里可以通过this.props取得父组件里面传来的值呢?
        const { name, age, height } = this.props;
        return (
            <div>
                <h2>{name + " " + age + " " + height}</h2>
            </div>
        )
    }
}

export default class App extends Component {
    render() {
        return (
            <div>
                <Son name="beiyep" age="18" height="1.88"></Son>
                <Son name="hala" age="188" height="1.88"></Son>
                <Son name="indexjs" age="11118" height="1.8228"></Son>
            </div>
        )
    }
}

2. 组件传递信息时的数据验证

import React, { Component } from 'react';
import PropTypes from "prop-types";

function Son(props) {
    const { name, age, height, names } = props;
    return (
        <div>
            <h2>{name + " " + age + " " + height}</h2>
            <ul>
                {
                    names.map((item, index) => {
                        return <li>{item}</li>
                    })
                }
            </ul>
        </div>
    )
}

Son.propTypes = {
    name: PropTypes.string.isRequired,
    age: PropTypes.number,
    height: PropTypes.number,
    names: PropTypes.array
}

// 默认属性
Son.defaultProps = {
    name: "hcb",
    age: 11,
    height: 178,
    names: ["hcb", "bbxk"]
}



export default class App extends Component {
    render() {
        return (
            <div>
                <Son name="beiyep333" age="18" height="1.88" names={["aaa", "bbb", "ccc"]}></Son>
                <Son name="hala333" age="188" height="1.88" names={["aaa", "bbb", "ccc"]}></Son>
                <Son name="indexjs函数" age="11118" height="1.8228"></Son>
            </div>
        )
    }
}
------------- 本文结束 感谢阅读 -------------