美文网首页
React02-组件通信

React02-组件通信

作者: 我也不知道啊丶 | 来源:发表于2019-01-06 17:29 被阅读0次

React父子组件之间如何通信
父组件传一个函数给子组件,子组件在适当的时候调用这个函数
React爷孙组件之间如何通信
爷组件把函数传给父组件,父组件把函数传给孙组件
看一个具体的demo吧
这是最终效果

龟兔赛跑
看看具体代码:
html部分
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>react-demo2龟兔赛跑</title>
    <link rel="stylesheet" href="./style.css">
    <script src="https://cdn.bootcss.com/react/16.7.0/umd/react.production.min.js"></script>
    <script src="https://cdn.bootcss.com/react-dom/16.7.0/umd/react-dom.production.min.js"></script>
    <script src="./main.js"></script>
</head>
<body>
    <div id="root">
        
    </div>
</body>
</html>

css部分

*{
    margin:0;
    padding:0;
    box-sizing: border-box;
}
body{
    padding:0 20px;
    overflow: hidden
}
.head{
    display: flex;
    justify-content: center;
}
.track{
    border:1px solid black;
}
.playGround{
    border:1px solid black;
    background:green
}
.referee{
    width:50px;
    height:50px;
}

js部分

function Rabbit(props){ //兔子
    return(
        <h1>🐰用时:<span>{props.result}</span></h1>
    )
}

function Tortoise(props){ //乌龟
    return(
        <h1>🐢用时:<span>{props.result}</span></h1>
    )
}

function Header(props){
    let result1 = props.result1
    let result2 = props.result2
    return (
        <div className='head'>
            <Rabbit result={result1}/>
            <Tortoise result={result2}/>
        </div>
    )
}

class Track1 extends React.Component{
    constructor(props){
        super(props)
        let n = 0;
        this.state = {
            style : {
                transform : `translateX(${n}%)`
            }
        }
        let timerId = setInterval(() =>{
            n+=10
            this.setState({
                style:{
                    transform : `translateX(${n}%)`
                }
            })
            if(n>=100){
                window.clearInterval(timerId)
                this.props.success('我是小兔子')
            }
        },1000)
    }

    render(){
        return(
            <div>
                <div className='play' style={this.state.style}>🐰</div>
                <div className='track'></div>
            </div>
        )
    }
}

class Track2 extends React.Component{
    constructor(props){
        super(props)
        let n = 0
        this.state = {
            style : {
                transform : `translateX(${n}%)`
            }
        }
        let timerId = setInterval(() =>{
            n += 5
            this.setState({
                style:{
                    transform : `translateX(${n}%)`
                }
            })
            if(n>=100){
                window.clearInterval(timerId)
                this.props.success('我是小乌龟')
            }
        },1000)
    }
    render(){
        return(
            <div>
                <div className='play' style={this.state.style}>🐢</div>
                <div className='track'></div>
            </div>
        )
    }
}

function Playground(props){
    let success1 = props.success1
    let success2 = props.success2
    return (
        <div className='playGround'>
            <Track1 success={success1}/>
            <Track2 success={success2}/>
        </div>
    )
}

class App extends React.Component{
    constructor(props){
        super(props)
        this.state = {
            result1 : 0,
            result2 : 0
        }
        this.t0 = new Date()
    }
    success1(x){
        console.log(x)
        let r1 =  parseInt((new Date() - this.t0)/1000) + 's'
        this.setState({
            result1 : r1
        })
    }
    success2(x){
        console.log(x)
        let r2 = parseInt((new Date() - this.t0)/1000) + 's'
        this.setState({
            result2 : r2
        })
    }
    render(){
        return (
            <div>
                <Header result1={this.state.result1} result2={this.state.result2} />
                <Playground success1={this.success1.bind(this)} success2={this.success2.bind(this)}/>
            </div>
        )
    }
}


ReactDOM.render(
    <App />,
    document.querySelector('#root')
)

相关文章

  • React02-组件通信

    React父子组件之间如何通信父组件传一个函数给子组件,子组件在适当的时候调用这个函数React爷孙组件之间如何通...

  • vue中的组件通信

    一、组件通信(组件传值) 1.1父子组件通信 1.2子父组件通信 1.3非父子组件通信(兄弟组件通信)

  • 组件通信

    组件通信分为几种: 父组件给子组件通信 子组件给父组件通信 兄弟组件通信 1.父组件给子组件通信 法一...

  • 组件通信

    组件关系 组件关系可以分为父子组件通信、兄弟组件通信、跨级组件通信。 父子组件通信 1. 子组件使用 $emit(...

  • react之组件通信

    需要组件之进行通信的几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 ...

  • React组件通信的几种方式

    需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1...

  • React中组件通信的几种方式

    需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1...

  • React中组件通信

    需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1...

  • 第七章 可复用性的组件详解(中)

    7.7 组件通信 组件关系可分为父子组件通信、兄弟组件通信、跨级组件通信 7.7.1 自定义事件—子组件给父组件传...

  • vue 组件通信方式 ,父子、隔代、兄弟 三类通信,六种方法

    Vue 组件间通信只要指以下 3 类通信:父子组件通信、隔代组件通信、兄弟组件通信,下面分别介绍每种通信方式且会说...

网友评论

      本文标题:React02-组件通信

      本文链接:https://www.haomeiwen.com/subject/zgnrrqtx.html