React组件通讯

1.子组件操作父组件值

父组件代码:

import React, { Component } from 'react'
import Demo from './Demo'
class Todo extends Component {
    constructor(){
        super();
        this.state = {
            title:'张三丰'
        }
    }
    addTodo = (title) =>{
        console.log(title)
        this.setState({
            title:title
        })
    }
    render() {
        return (
            <div>
                我的名字叫:{this.state.title}
                <Demo addTodo = {this.addTodo} />
            </div>
        )
    }
}
export default Todo

子组件代码:

import React, { Component } from 'react'


class Demo extends Component {
    constructor(){
        super();

        this.state = {
            inputValue :'',
        }
    }

    handleInputValue = (e) =>{
        console.log(e.currentTarget.value);
        this.setState({
            inputValue:e.currentTarget.value
        })
    }
    handleAddBtn = () => {
        console.log(this.state)
        
        this.props.addTodo(this.state.inputValue)
    }
    render() {
        return (
            <div>
                <input 
                    type="text" 
                    value={this.state.inputValue} 
                    onChange={this.handleInputValue}    
                />
                <button onClick={this.handleAddBtn} >点击</button>
            </div>
        )
    }
}
export default Demo;

 方法传值:

this.handleInputValue.bind(this,123)

 通过ref获取组件或DOM,需先引入createRef方法来创建一个ref

constructor(){
        super();

        this.state = {
            inputValue :'',
        }

        this.inputDom = createRef()  //创建
    }
render() {
        return (
            <div>
                <input 
                    type="text" 
                    value={this.state.inputValue} 
                    onChange={this.handleInputValue}
                    ref={this.inputDom}    //调用
                />
                <button onClick={this.handleAddBtn} >点击</button>
            </div>
        )
    }

 

 handleInputValue = (e) =>{
        console.log(e.currentTarget.value);
        this.setState({
            inputValue:e.currentTarget.value
        },()=>{
            this.inputDom.current.foucs() //操作DOM
        })
    }

 

posted @ 2020-09-08 23:44  FinnYY  阅读(140)  评论(0编辑  收藏  举报