React父传子和子组件触发修改父组件修改数据

子组件是不可以直接修改props的,只能通过触发父组件的方法来修改
父传子通过子组件标签上定义属性后传入this.state的数据

import React, { Component } from 'react'

class Child extends Component{
    render() {
        return (
            <div style={{display:this.props.isShow===true? 'block' : 'none'}}>
    <p style={{color:this.props.fontColor}}>{this.props.title}</p>{/* 通过this.props接收传过来的值 */}
                <button onClick={this.props.change}>子组件按钮</button> {/* 通过父组件传进来的方法来修改数据 */}
                <button onClick={()=>this.props.add(2)}>累加2</button>
                <ul>
                    {
                        this.props.arr.map((item,index)=>{
                        return <li key={index}>{item}</li>
                        })
                    }
                </ul>
            </div>
        )
    }
}

export default class app5 extends Component {
    constructor(props){
        super(props)
        this.state = {
            person:['虚竹','段誉','王语嫣'],
            isShow:true,
            num:20
        }
    }
    change(){
        this.setState({
            isShow:!this.state.isShow /* 使用this.setState 将this.state.isShow取反 */
        })
    }
    add(num){
        this.setState({
            num:this.state.num + num
        })
    }
    render() {
        return (
            <div>
                <p>父组件的文字</p>
        <p>{this.state.num}</p>
                <button onClick={this.change.bind(this)}>切换</button>{/* 添加事件 修改this.state里面的isShow,实现父传子的显示与隐藏 */}
                <hr/>
                <Child title='你好世界' 
                fontColor="pink" 
                arr={this.state.person} 
                isShow={this.state.isShow}  /*  子组件定义属性把父组件的值通过this.state传进去 */
                change={this.change.bind(this)}
                add={(num)=>this.add(num)}
                /> {/* 把父组件方法传入子组件,传值需要写箭头函数需要子组件通过props来接收和执行 */}
               
            </div>
        )
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 8,550评论 1 33
  • 前言 开发一个React应用,更多的是在编写组件,而React组件最小的单位就是React元素,编写组件的最大的好...
    itclanCoder阅读 1,202评论 0 1
  • 40、React 什么是React?React 是一个用于构建用户界面的框架(采用的是MVC模式):集中处理VIE...
    萌妹撒阅读 1,091评论 0 1
  • 前言 组件中的state具体是什么?怎么更改state的数据? setState函数分别接收对象以及函数有什么区别...
    itclanCoder阅读 951评论 0 0
  • 基础语法规范非 1.js中的构造函数的名字的首字母必须大写(也就是构造函数与普通函数的区别) 2.react中的组...
    前端伊始阅读 511评论 0 0