反応における親子コンポーネントの値の転送の詳細な説明、値の受け渡しの検証の実行方法(親子、子コンポーネントは親コンポーネントの値を変更します)

親子コンポーネントの値渡し

反応では、propsのメソッドは親から子に使用でき、propsのコールバック関数は子から親の
親コンポーネント
に使用されます。親コンポーネントで状態を定義し、この状態オブジェクトを子に渡します。コンポーネントなので、直接{…this.state}と書くことができます

import React, {
    
     Component } from 'react'
import Son from './son'

export class Parent extends Component {
    
    
    constructor() {
    
    
        super()
        this.state = {
    
    
            name: '父组件',
            msg: '这是父组件的信息'
        }
    }
    render() {
    
    
        return (
            <div>
                <h1>Parent Page</h1>
                <h2>我是父组件的:{
    
    msg}--{
    
    name}</h2>
                <Son {
    
    ...this.state} parentChange={
    
    this.parentChange.bind(this)}/>
            </div>
        )
    }
}

export default Parent

子コンポーネント:
parentMsg:props.msgを状態で書き込み、parentMsgをページに直接表示できるようにします。つまり、親コンポーネントから渡された値です。

import React, {
    
     Component } from 'react'

export class Son extends Component {
    
    
    constructor(props) {
    
    
        super()
        this.state = {
    
    
            name: '子组件',
            msg: '这是子组件的内容',
            parentMsg: props.msg
        }
    }
    render() {
    
    
        // 在这种父子组件中需要用到同样的属性名的时候,我们会选择定义别名进行区分
        let {
    
     name, msg, parentMsg } = this.state
        return (
            <div>
                <h1>Son Page</h1>
                <p>{
    
    name}-{
    
    msg}</p>
                <p>父组件传过来的值{
    
    parentMsg}</p>
            </div>
        )
    }
}
export default Son

親子コンポーネントの重複の問題が解決されました

親コンポーネントには名前msgがあり、子コンポーネントにも変数の名前があります。一緒に使用する場合はどうすればよいですか。
サブコンポーネントでは、状態はそれ自体であり、小道具は外部から渡されるため、小道具の変数に
エイリアスを付けることができます。エイリアスを使用したくない場合は、this.state.nameを使用することもできます。直接、this.props.name

import React, {
    
     Component } from 'react'

export class Son extends Component {
    
    
    constructor(props) {
    
    
        super()
        this.state = {
    
    
            name: '子组件',
            msg: '这是子组件的内容',
            parentMsg: props.msg
        }
    }
    render() {
    
    
        // 在这种父子组件中需要用到同样的属性名的时候,我们会选择定义别名进行区分
        let {
    
     name: pName, msg: pMsg } = this.props
        let {
    
     name, msg, parentMsg } = this.state
        return (
            <div>
                <h1>Son Page</h1>
                <p>{
    
    name}-{
    
    msg}</p>
                <p>父组件传过来的值{
    
    parentMsg}-{
    
    pName}-{
    
    pMsg}</p>
            </div>
        )
    }
}
export default Son

子コンポーネントは親コンポーネントの値を変更します

子コンポーネントに入力ボックスを定義し、この入力ボックスを介して親コンポーネントによって表示される値を変更したいと考えています。
アイデア:親コンポーネントにメソッドを記述し、子コンポーネントで呼び出します。
親コンポーネント:
1。関数を定義します。 parentChangeを実行し、内部のデータをパラメーターとして使用します。Passin2
.メソッドを子コンポーネントに渡します<Son{…this.state}parentChange = {this.parentChange.bind(this)} />

import React, {
    
     Component } from 'react'
import Son from './son'

export class Parent extends Component {
    
    
    constructor() {
    
    
        super()
        this.state = {
    
    
            name: '父组件',
            msg: '这是父组件的信息'
        }
    }
    // 如果要让子组件改父组件的值的话就需要定义这个函数
    parentChange(data) {
    
    
        console.log(data)
        this.setState({
    
    msg: data})
    }
    render() {
    
    
        let {
    
     name, msg } = this.state
        return (
            <div>
                <h1>Parent Page</h1>
                <h2>我是父组件的:{
    
    msg}--{
    
    name}</h2>
                {
    
    /* 子组件改父组件的值,就把父组件的改值事件传给子组件进行一个回调 */}
                <Son {
    
    ...this.state} parentChange={
    
    this.parentChange.bind(this)}/>
            </div>
        )
    }
}

export default Parent

サブコンポーネント:
1。onChange関数を入力ボックスにバインドします
。2。handleChange関数で、親コンポーネントから渡されたメソッドthis.props.parentChange(e.target.value)を呼び出します。渡された値は、入力入力

import React, {
    
     Component } from 'react'

export class Son extends Component {
    
    
    constructor(props) {
    
    
        super()
        this.state = {
    
    
            name: '子组件',
            msg: '这是子组件的内容',
            parentMsg: props.msg
        }
    }
    handleChange = (e) => {
    
    
        this.setState({
    
    parentMsg: e.target.value})
        // 这里对父组件传过来的方法进行调用
        this.props.parentChange(e.target.value)
    }
    render() {
    
    
        // 在这种父子组件中需要用到同样的属性名的时候,我们会选择定义别名进行区分
        let {
    
     name, msg, parentMsg } = this.state
        return (
            <div>
                <h1>Son Page</h1>
                <p>{
    
    name}-{
    
    msg}</p>
                <p>父组件传过来的值{
    
    parentMsg}</p>
                <input type="text" value={
    
    parentMsg} onChange={
    
    this.handleChange} />
            </div>
        )
    }
}
export default Son

値渡しチェック

渡された値のタイプを確認したい場合はどうなりますか?
ここでの検証は、主にコードの可読性を向上させ、共同開発を促進し、効率を向上させることです。

値渡しの検証には、prop-typesを使用する必要があります。react15バージョンの後、prop-typesは手動でダウンロードする必要がある別のパッケージです。

ダウンロードが完了したら、サブコンポーネントページの上部に直接インポートします。

import PropTypes from 'prop-types'

サブコンポーネントで値型の検証を実行
します。構文を使用します。componentname.propTypesはプロパティを追加し、プロパティ値はオブジェクトです

Son.propTypes = {
    
    
    name: PropTypes.string.isRequired, // 给isRequired属性代表必传项,不传就会报错
    msg: PropTypes.string
}

// 如果需要制定默认值则像下面这样使用
Son.defaultProps = {
    
    
    name: 'beiyu',
    msg: '学习react'
}

おすすめ

転載: blog.csdn.net/weixin_45745641/article/details/123451806