天天看點

React資料通信父傳子和子傳父的使用

元件中的props
在react中,props的特點是:
1.可以給元件傳遞任意類型的資料
2.props是隻讀的對象,隻能夠讀取屬性的值,無法修改對象
如過我們強行修改資料,會報錯,告訴我們該屬性是隻讀屬性。

ps:在類元件中,如果寫了構造函數,應該将props傳遞給super().
否則無法在構造函數中擷取到props      
函數元件-父傳子
子元件.js
const FunCom = (props) => { 
    return (
        <div>
            <h2>我是函數元件</h2>
            <p>我叫{ props.name}</p>
        </div>
    )
}
export default FunCom      
頁面使用
import React from 'react';
import ReactDOM from 'react-dom'; 
<!-- 引入 -->
import FunCom from  './components/FunCom'
ReactDOM.render(<FunCom name="李大為"/>, document.getElementById('root'))      
類元件-父傳子
子元件
import React from "react";
class FunCom extends React.Component{
    render() { 
        return (
            <div>
                <h2>我是函數元件</h2>
                <p>我叫{ this.props.name}</p>
            </div>
        )
    }
}
export default FunCom      
頁面使用
import React from 'react';
import ReactDOM from 'react-dom'; 
<!-- 引入 -->
import FunCom from  './components/FunCom'
ReactDOM.render(<FunCom name="李大為"/>, document.getElementById('root'))      
函數元件與類元件接收參數的差別
函數元件接受參數直接是:props.xxx
類元件接受參數直接是: this.props.xxx      
元件可以傳遞那些值?
可以傳遞:可以傳遞數字, xxx={19}
html,函數等等....
詳細代碼如下

父元件
import React from 'react'; //這個是react這個包,我們是需要的
import ReactDOM from 'react-dom'; //這個是react的虛拟dom
import FunCom from './components/FunCom'

ReactDOM.render(<FunCom name="李大為" age={19} fn={() => { console.log('我被出發了')}} tag={<h2>我是H2</h2>}  />,
  document.getElementById('root'))      
子元件
import React from "react";
class FunCom extends React.Component{
    render() { 
        console.log(this.props)
        return (
            <div>
                <h2>我是函數元件</h2>
                <p>我叫{this.props.name}</p>
                { this.props.tag}
            </div>
        )
    }
}
export default FunCom      
React資料通信父傳子和子傳父的使用
子元件傳遞資料父元件
1.父元件提供一個回調函數(用于接受資料)
2.将該函數作為屬性的值,傳遞給子元件      
兒子元件
import React from "react";
class FunCom extends React.Component{
    state = {
        msg:'兒子給父親的資料'
    }

    // 将資料傳遞給父元件
    giveFtaher = () => { 
        this.props.giveChildren(this.state.msg)
    }
    render() { 
        return (
            <div>
                <p>我是函數元件</p>
                <button onClick={this.giveFtaher}>給父元件</button>
            </div>
        )
    }
}
export default FunCom      
父元件
import React from 'react'; //這個是react這個包,我們是需要的
import ReactDOM from 'react-dom'; //這個是react的虛拟dom
import FunCom from './components/FunCom'


class PartentHello extends React.Component {
  // 當點選按鈕的收,子元件會觸發這個方法
  getMsg = (data) => {
    console.log('接收到子元件的資料',data)
  }

  render() { 
    return (
      <div>
        <p>我是首頁面</p>
        <FunCom giveChildren={ this.getMsg}></FunCom>
      </div>
    )
  }
}
ReactDOM.render(<PartentHello></PartentHello>,document.getElementById('root'))      

遇見問題,這是你成長的機會,如果你能夠解決,這就是收獲。

繼續閱讀