91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

React三大屬性之props怎么用

發布時間:2021-04-15 11:14:22 來源:億速云 閱讀:131 作者:小新 欄目:開發技術

這篇文章主要介紹React三大屬性之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>
        )
    }
}

函數組件

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

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

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

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

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

props是只讀的

React在文檔中強調

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

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

組件間通信

現在來總結一下組件間通信:

  • props 首先上一個類組件的寫法:

//父組件給子組件傳值以及說過了,現在總結子組件給父組件傳值,此時往往需要父組件給子組件先傳一個props函數,子組件通過調用傳入的函數傳值改變父組件的值
export default class Fa extends Component {
    state = {faValue:'Fa1'}

    changeFa = (value)=>{
        this.setState(()=>{
            return {faValue:value}
        })
    }
    render() {
        return (
            <>
                <h2>Fa's value is {this.state.faValue}</h2>
                <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>
            </>
        )
    }
}

然后寫一個函數組件的寫法:

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

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

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

這個可以理解為弱化的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,發布的相應的事件,并且定義事件要做什么事。第二個是publish,訂閱發布的事情,并且傳入相應要改變的值。第三個是unsubscribe用來取消發布的事情,做內存的優化

以上是“React三大屬性之props怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永定县| 拉萨市| 襄城县| 涟水县| 嘉祥县| 西林县| 江门市| 万载县| 常熟市| 城市| 达日县| 绵阳市| 涞水县| 游戏| 南昌市| 资讯| 洪泽县| 夹江县| 桐庐县| 浏阳市| 浪卡子县| 北安市| 柘荣县| 万安县| 南乐县| 阳春市| 万年县| 柘城县| 石狮市| 牡丹江市| 宁德市| 涿鹿县| 遵化市| 略阳县| 桂平市| 庐江县| 达尔| 建始县| 邢台县| 咸阳市| 文登市|