欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React三大屬性之props的使用詳解

 更新時間:2021年04月15日 09:36:23   作者:xiaoznz  
這篇文章主要介紹了React三大屬性之props的使用詳解,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下

上期講了state,接下來講講props。props功能在于組件間通信(父子組件),首先說說在各種組件中的用法:

類組件

//父組件傳值
class Father extends React.PureComponent{
    render(){
        return (
            <Son value={"son"} />
        )
    }
}

class Son extends React.PureComponent{
    render(){
        return (
            <div>this data is {this.props.value}</div>
        )
    }
}

函數(shù)組件

function Fa(){
    return (
        <Son value={"son"} />
    )
}

function Son(props){
    return (
        <div>this data is {props.value}</div>
    )
}

在函數(shù)組件中,props只需要傳一個值就好了,非常方便 在React文檔中,對props的解釋是

當 React 元素為用戶自定義組件時,它會將 JSX 所接收的屬性(attributes)以及子組件(children)轉(zhuǎn)換為單個對象傳遞給組件,這個對象被稱之為 “props”

所以,我們通過props能得到父類組件上傳的值,也能通過props.children直接得到jsx寫成的子組件

props是只讀的

React在文檔中強調(diào)

所有 React 組件都必須像純函數(shù)一樣保護它們的 props 不被更改。

純函數(shù)的概念我們已經(jīng)在redux中解釋過了,總而言之,我們不能改變props的值。

組件間通信

現(xiàn)在來總結(jié)一下組件間通信:

  • props 首先上一個類組件的寫法:
//父組件給子組件傳值以及說過了,現(xiàn)在總結(jié)子組件給父組件傳值,此時往往需要父組件給子組件先傳一個props函數(shù),子組件通過調(diào)用傳入的函數(shù)傳值改變父組件的值
export default class Fa extends Component {
    state = {faValue:'Fa1'}

    changeFa = (value)=>{
        this.setState(()=>{
            return {faValue:value}
        })
    }
    render() {
        return (
            <>
                <h1>Fa's value is {this.state.faValue}</h1>
                <Son changeFa={this.changeFa}/>
            </>
        )
    }
}

export default class Son extends React.PureComponent{

    changeValue = ()=>{
        this.props.changeFa(this.inputRef.value)
    }
    render() {
        return (
            <>
                <input type="text" placeholder={"請輸入您的值"} ref={(el)=>{this.inputRef = el}}/>
                <button onClick={this.changeValue}>change</button>
            </>
        )
    }
}

然后寫一個函數(shù)組件的寫法:

function Fa(){
    const [faValue,setFaValue] = useState("Fa1")

    const changeFa = (value)=>{
        setFaValue(value)
    }
    return (
        <div>
            <h1>Fa's value is {faValue}</h1>
            <Son changeFa={changeFa} />
        </div>
    )
}

function Son(props){
    const inputValue = useRef("")
        //定義改變fa組件的值的函數(shù)
        const changeFaValue = ()=>{
            props.changeFa(inputValue.current.value)
        }
        return (
            <>
                <input type="text" placeholder={"請輸入您要改變的值"} ref={inputValue}/>
                <button onClick={changeFaValue}>change value</button>
            </>
        )
}
  • eventbus(訂閱-發(fā)布機制)

這個可以理解為弱化的redux。這邊我們用庫pubsub-js來寫。寫法如下:

//比如針對之前的輸入案例,我需要給兄弟組件傳一個值value,如果不用props,我們該怎么寫
Bro:
export default class Bro extends Component {

    componentDidMount() {
        this.sonData =  PubSub.subscribe("brother",(msg,data)=>{
            console.log("Bro Component have recived the msg",data);
        })
    }

    componentWillUnmount() {
        PubSub.unsubscribe(this.sonData)
    }

    render() {
        return (
            <>
                <div>brother</div>
            </>
        )
    }
}
Son:
export default class Son extends React.PureComponent{

    changeValue = ()=>{
        PubSub.publish("brother",this.inputRef.value)
    }

    render() {
        return (
            <>
                <input type="text" placeholder={"請輸入您的值"} ref={(el)=>{this.inputRef = el}}/>
                <button onClick={this.changeValue}>change</button>
            </>
        )
    }
}

這個方法常用的就是三個api,第一個subscribe,發(fā)布的相應的事件,并且定義事件要做什么事。第二個是publish,訂閱發(fā)布的事情,并且傳入相應要改變的值。第三個是unsubscribe用來取消發(fā)布的事情,做內(nèi)存的優(yōu)化

以上就是React三大屬性之props的使用詳解的詳細內(nèi)容,更多關于React三大屬性之props的資料請關注腳本之家其它相關文章!

相關文章

  • 使用React?Router?v6?添加身份驗證的方法

    使用React?Router?v6?添加身份驗證的方法

    這篇文章主要介紹了使用React?Router?v6?進行身份驗證完全指南,本文將演示如何使用React?Router?v6創(chuàng)建受保護的路由以及如何添加身份驗證,需要的朋友可以參考下
    2022-05-05
  • 一文詳解React中如何實現(xiàn)組件懶加載

    一文詳解React中如何實現(xiàn)組件懶加載

    懶加載是一種優(yōu)化技術(shù),旨在延遲加載不必要的資源,直到它們真正需要時再進行加載,那么React的懶加載是如何實現(xiàn)的呢,下面小編就來和大家詳細講講吧
    2025-03-03
  • React使用useEffect解決setState副作用詳解

    React使用useEffect解決setState副作用詳解

    這篇文章主要為大家介紹了React使用useEffect解決setState副作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • React中使用async validator進行表單驗證的實例代碼

    React中使用async validator進行表單驗證的實例代碼

    react上進行表單驗證是很繁瑣的,在這里使用async-validator處理起來就變的很方便了,接下來通過本文給大家介紹React中使用async validator進行表單驗證的方法,需要的朋友可以參考下
    2018-08-08
  • 一文理解Redux及其工作原理

    一文理解Redux及其工作原理

    這篇文章主要介紹了一文理解R通過圍繞主題展開詳細edux及其工作原理,文章通過主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 詳解React項目的服務端渲染改造(koa2+webpack3.11)

    詳解React項目的服務端渲染改造(koa2+webpack3.11)

    本篇文章主要介紹了詳解React項目的服務端渲染改造(koa2+webpack3.11),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • React 項目中動態(tài)設置環(huán)境變量

    React 項目中動態(tài)設置環(huán)境變量

    本文主要介紹了React 項目中動態(tài)設置環(huán)境變量,本文將介紹兩種常用的方法,使用 dotenv 庫和通過命令行參數(shù)傳遞環(huán)境變量,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 使用react+redux實現(xiàn)計數(shù)器功能及遇到問題

    使用react+redux實現(xiàn)計數(shù)器功能及遇到問題

    使用redux管理數(shù)據(jù),由于Store獨立于組件,使得數(shù)據(jù)管理獨立于組件,解決了組件之間傳遞數(shù)據(jù)困難的問題,非常好用,今天重點給大家介紹使用react+redux實現(xiàn)計數(shù)器功能及遇到問題,感興趣的朋友參考下吧
    2021-06-06
  • React?Native?中限制導入某些組件和模塊的方法

    React?Native?中限制導入某些組件和模塊的方法

    這篇文章主要介紹了React?Native?中限制導入某些組件和模塊的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • react項目如何運行在微信公眾號

    react項目如何運行在微信公眾號

    這篇文章主要介紹了react項目如何運行在微信公眾號,幫助大家更好的理解和學習使用react,感興趣的朋友可以了解下
    2021-04-04

最新評論