在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 子組件不斷的向父組件傳值,react如何實(shí)現(xiàn)

子組件不斷的向父組件傳值,react如何實(shí)現(xiàn)

問(wèn)題描述

實(shí)現(xiàn)一個(gè)升級(jí)的游戲,第一局結(jié)束之后,自組件告訴父組件,升級(jí)+1,第二局結(jié)束后,再通知父組件升級(jí)+1

問(wèn)題出現(xiàn)的環(huán)境背景及自己嘗試過(guò)哪些方法

以下是我參考了阿里的實(shí)現(xiàn)方式,在componentdidmount中,子組件確實(shí)可以向父組件傳值,但是第一局結(jié)束后,可以第二局,不能實(shí)現(xiàn)第三局.如果我把函數(shù)放在update中,那么組件會(huì)一只刷新。最后奔潰,求問(wèn)如何解決
鏈接描述###
// 請(qǐng)把代碼文本粘貼到下方(請(qǐng)勿用圖片代替代碼)

//父組件
 setLevel(level){
        console.log('setLvel',level)
        this.setState({
            level
        })
        console.log('new setLvel',level)
    }
    
  render(){
        console.log('level parent ',this.state.level)

        if(this.state.level===1){
          var  _urls = urls.slice(0,4);
            randomUrls =   this.spreadImg(_urls)
        }
        
        if(this.state.level===2){
              _urls = urls.slice(0,6);
              randomUrls =   this.spreadImg(_urls);
        }
        if(this.state.level===3){
            _urls = urls.slice(0,8);
            randomUrls =   this.spreadImg(_urls);
      }

        var bgStyle = {
            backgroundImage: `url(${bg})`,
            width:'100%',
            height:'100vh',
            backgroundSize:'contain'
        };
        return (
            <div style={bgStyle}>
                <section className="stage">
                    <section>
                        <ImgFigureSection 
                        setLevel = { level => this.setLevel(level) } 
                        level={this.state.level} 
                        randomUrls = {randomUrls} />
                    </section>
                </section>
            </div>
        )
    } 
    子組件
    componentDidMount(){
        console.log('didmount',this.state)
        if(this.state.level===1){
            setTimeout(()=>{
                this.props.setLevel(2)
            },10000)
        }else if(this.state===2){
            setTimeout(()=>{
                this.props.setLevel(3)
            },10000)
        }
    }    
    

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

其中在子組件中,我并不希望用setTimeout,我想要level+1了,那么就通知父組件更新

回答
編輯回答
不討囍

你可以任何時(shí)候,在子組件里面 調(diào)用 this.props.setLevel();

// 子組件
    endGane = () => {
        // 游戲結(jié)束
       this.props.setLevel()
    }
    componentDidMount(){
    }   
2017年9月27日 08:34