溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

react 中父組件與子組件雙向綁定問(wèn)題

發(fā)布時(shí)間:2020-10-06 01:22:45 來(lái)源:腳本之家 閱讀:220 作者:不覺(jué)南風(fēng) 欄目:web開(kāi)發(fā)

在項(xiàng)目中我們可能會(huì)遇到類(lèi)似這樣的場(chǎng)景,也就是父子組件的雙向數(shù)據(jù)綁定

react 中父組件與子組件雙向綁定問(wèn)題

首先,先把在head中引入react.js、react-dom.js和可選擇的babel.js(這里需要注意引用的順序,react.js必須在react-dom.js之前)

<head>
  <script src="react.js"></script>
  <script src="react-dom.js"></script>
  <script src="babel.js"></script>
</head> 

 在body里新建一個(gè)掛載點(diǎn)

<body>
  <div id='app'></div>
</body> 

然后就可以開(kāi)始寫(xiě)JSX了,注意script標(biāo)簽需注明type類(lèi)型為"text/babel"或"text/jsx"

<script tpye='text/babel'>
//父組件
  class Father extends React.Component {
    constructor(props) {
      super(props)
      this.state = {
        fname: '父組件',
        fage: 18,
        key: '' 
      };
    }
    setFname(event) {
      this.setState({fname: event.target.value, key: event.target.value});  //設(shè)置fname值為input的value值;key用來(lái)監(jiān)聽(tīng)值是否變化 
} setFage(event) { this.setState({fage: event.target.value, key: event.target.value}) } toData(data) { this.setState({fname: data.name}); this.setState({fage: data.age}); } render() { return ( <div> <table border="1" cellSpacing="0"> <tbody> <tr> <th colSpan="3">父組件數(shù)據(jù)</th> </tr> <tr> <td>name</td> <td>{this.state.nameFvalue}</td> <td><input value={this.state.fname} onChange={this.setFname.bind(this)}/></td> //受控組件當(dāng)input值改變時(shí)觸發(fā)方法setFname </tr> <tr> <td>age</td> <td>{this.state.ageFvalue}</td> <td><input value={this.state.fage} onChange={this.setFage.bind(this)}/></td> </tr> </tbody> </table><br>           <br>           //子組件標(biāo)簽里將父組件的數(shù)據(jù)傳遞給子組件,在子組件里利用props接收;key值變化時(shí),子組件數(shù)據(jù)更新
          <Son key={this.state.key} fname={this.state.fname} fage={this.state.fage} toData={this.toData.bind(this)}></Son>  
        </div>
      )
    }
  }<br><br><br> //子組件<br><br> 
class Son extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      sVname: this.props.fname, //將父組件傳下來(lái)的值賦給sVname
      sVage: this.props.fage  
    }
  }
  sVname(ev) {
    console.log(ev.target)
    this.setState({
      sVname: ev.target.value
    })
  }
  sVage(ev) {
    this.setState({
      sVage: ev.target.value
    })
  }
  toData(data) {
    // console.log(svname)
    this.props.toData(data)
  }
  render() {
    return (
      <div>
        <button onClick={this.toData.bind(this, {name: this.state.sVname, age: this.state.sVage})}>點(diǎn)我傳值
        </button>
        <table border="1" cellSpacing="0">
          <tbody>
          <tr>
            <th colSpan="3">子組件數(shù)據(jù)</th>
          </tr>
          <tr>
            <td>name</td>
            <td>{this.state.sVname}</td>
            <td><input value={this.state.sVname} onChange={this.sVname.bind(this)}/></td>
          </tr>
          <tr>
            <td>age</td>
            <td>{this.state.sVage}</td>
            <td><input value={this.state.sVage} onChange={this.sVage.bind(this)}/></td>
          </tr>
          </tbody>
        </table>
      </div>

    )
  }
}
</script> 

總結(jié)

以上所述是小編給大家介紹的react 中父組件與子組件雙向綁定問(wèn)題,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI