• react-笔记(4)


    1、父组件给子组件传值:
        在子组件标签内部定义属性,在子组件内通过this.porps接受到外部传递来的属性
     

    2、子传父
        在子组件标签内部定义属性 值为函数 在子组件内部通过this.porps接受到这个函数进行调用 传递需要传递的值
     

    3、非父子组件
        手动封装$on $emit $off 将三个方法暴露出去
        传值的一方调用$emit 接受值的一方调用$on
     

    4、list.map(cb=>cb(params) 
        遍历数组,cb是函数名,cb()调用,cb(params)调用,并传入参数
     

     
    1.父传子: props
    2.子传父:方法
    App.js(父)
    import React ,{Component,Fragment} from "react";
    import One from "./One"
    export default class App extends Component{
        constructor(){
            super();
            this.state={
                msg:"12345678",
                oneVal:""
            }
           
        }
        render(){
            let {msg,oneVal} = this.state;
            return(
                <Fragment>              
                    <One val = {msg} send={this.handlesend.bind(this)}></One>
                    <h2>接收到子组件的值为:{oneVal}</h2>
                </Fragment>
            )   
        }
        handlesend(val){
            this.setState({
                oneVal:val
            })
        }
    }
    One.js:(子):
    import React,{Component,Fragement} from "react";
    export default class One extends Component{
        constructor(){
            super();
            this.state={
                email:"hello"
            }
        }
       
        render(){
            //子传父用props
            console.log(this.props)
            return(
                <div>
                    <h3>接收到父组件的值:{this.props.val}</h3>
                    <hr/>
                    
                    <button onClick={this.handleClick.bind(this)}>发送给父组件</button>
                </div>
            )
        }
          //子传父:
         //调用父组件里面的方法,并传入形参;
        handleClick(){
            this.props.send(this.state.email)
        }
    }
     

    任意组件间传值:
        用封装好的$on $emit方法;one 传给 two ,在two里面绑定,one里面调用
    one.js:
    import React,{Component,Fragement} from "react";
    import Observe from "./observe"
    console.log(Observe)
    export default class One extends Component{
        constructor(){
            super();
            this.state={
                email:"hello",
                sendTwo:"one给two的数据"
            }
        }
       
        render(){
            //子传父用props
            console.log(this.props)    //props里面有val send
            return(
                <div>
                    <h3>接收到父组件的值:{this.props.val}</h3>
                    <hr/>
                    
                    <button onClick={this.handleClick.bind(this)}>发送给父组件</button>
                    <button onClick={this.handleTwo.bind(this)}>one给two的数据</button>
                </div>
            )
        }
         //调用父组件里面的方法,并传入形参;
        handleClick(){
            this.props.send(this.state.email)
        }
        handleTwo(){
            Observe.$emit("handle",this.state.sendTwo)
        }
    }
     
    two.js:
    import React,{Component,Fragement} from "react";
    import Observe from "./observe"
    console.log(Observe)
    export default class Two extends Component{
        constructor(){
            super();
            this.state={
                oneVal:""
            }
        }
        render(){
            Observe.$on("handle",(val)=>{
                this.setState({
                    oneVal : val
                })
            })
            return(
                <div> 接收到one的数据:{this.state.oneVal}</div>
            )
        }
    }
    注:这种传值方式如果two组件隐藏就传不了;
  • 相关阅读:
    【Leetcode_easy】1030. Matrix Cells in Distance Order
    【Leetcode_easy】1033. Moving Stones Until Consecutive
    【Leetcode_easy】1037. Valid Boomerang
    【Leetcode_easy】1042. Flower Planting With No Adjacent
    【Leetcode_easy】1046. Last Stone Weight
    【Leetcode_easy】1047. Remove All Adjacent Duplicates In String
    【Leetcode_easy】1051. Height Checker
    【Leetcode_easy】1071. Greatest Common Divisor of Strings
    【Leetcode_easy】1154. Day of the Year
    【Leetcode_easy】1170. Compare Strings by Frequency of the Smallest Character
  • 原文地址:https://www.cnblogs.com/liuqinq/p/10017222.html
Copyright © 2020-2023  润新知