激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - React - React三大屬性之props的使用詳解

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

2022-03-02 16:28xiaoznz React

這篇文章主要介紹了React三大屬性之props的使用詳解,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下

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

類組件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//父組件傳值
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>
        )
    }
}

函數組件

?
1
2
3
4
5
6
7
8
9
10
11
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 首先上一個類組件的寫法:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//父組件給子組件傳值以及說過了,現在總結子組件給父組件傳值,此時往往需要父組件給子組件先傳一個props函數,子組件通過調用傳入的函數傳值改變父組件的值
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>
            </>
        )
    }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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組件的值的函數
        const changeFaValue = ()=>{
            props.changeFa(inputValue.current.value)
        }
        return (
            <>
                <input type="text" placeholder={"請輸入您要改變的值"} ref={inputValue}/>
                <button onClick={changeFaValue}>change value</button>
            </>
        )
}
  • eventbus(訂閱-發布機制)

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//比如針對之前的輸入案例,我需要給兄弟組件傳一個值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的使用詳解的詳細內容,更多關于React三大屬性之props的資料請關注服務器之家其它相關文章!

原文鏈接:https://juejin.cn/post/6950932903274496031

延伸 · 閱讀

精彩推薦
  • ReactReact使用emotion寫css代碼

    React使用emotion寫css代碼

    這篇文章主要介紹了React如何使用emotion寫css代碼,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下...

    joychenke8212022-02-25
  • React深入理解React Native核心原理(React Native的橋接(Bridge)

    深入理解React Native核心原理(React Native的橋接(Bridge)

    這篇文章主要介紹了深入理解React Native核心原理(React Native的橋接(Bridge),本文重點給大家介紹React Native的基礎知識及實現原理,需要的朋友可以參考下...

    Gavell9572022-02-23
  • React詳解對于React結合Antd的Form組件實現登錄功能

    詳解對于React結合Antd的Form組件實現登錄功能

    這篇文章主要介紹了詳解對于React結合Antd的Form組件實現登錄功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    浮生離夢6582022-02-23
  • React詳解React中key的作用

    詳解React中key的作用

    這篇文章主要介紹了React中key的作用,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下...

    夏花未眠4412022-02-28
  • ReactReact.Children的用法詳解

    React.Children的用法詳解

    這篇文章主要介紹了React.Children的用法詳解,幫助大家更好的理解和學習使用React框架,感興趣的朋友可以了解下...

    uuihoo10692022-02-23
  • ReactReact html中使用react的兩種方式

    React html中使用react的兩種方式

    這篇文章主要介紹了React html中使用react的兩種方式,本文給大家提到了React pwa的配置代碼,給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒...

    愚公搬代碼6322022-02-23
  • React使用react從零封裝一個可實時預覽的Json編輯器

    使用react從零封裝一個可實時預覽的Json編輯器

    文章將介紹如何使用react,開發一個自定義json編輯器組件.我們這里使用了jsoneditor這個第三方庫。...

    趣談前端7512022-01-12
  • React淺談React Router關于history的那些事

    淺談React Router關于history的那些事

    這篇文章主要介紹了淺談React Router關于history的那些事,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們...

    這是上帝的杰作11972022-02-23
主站蜘蛛池模板: www.成人免费视频 | 久久亚洲线观看视频 | 久久久麻豆 | 成人在线观看一区二区三区 | 毛片视频免费观看 | 国产一区二区三区在线免费 | 精品亚洲免费 | 日韩一级免费毛片 | 黄色淫片| 丰满年轻岳中文字幕一区二区 | 成人一级视频在线观看 | 久久人| 亚洲男人一区 | 香蕉久久久| 黄色大片免费网站 | 国产精品久久二区 | 毛片免费视频观看 | 九九视频精品在线 | 龙床上的呻吟高h | 中文字幕亚洲欧美 | 91精品国产99久久久久久 | 中国7777高潮网站 | 亚洲一区成人 | 校花被肉干高h潮不断 | 在线看免电影网站 | 美女擦逼 | 女人裸体让男人桶全过程 | 成人福利视频在 | 性 毛片| 亚洲综合网站 | 国产精品成人免费一区久久羞羞 | 亚洲人成网站在e线播放 | 精品国产一区二区三区免费 | 中文字幕在线观看网址 | 91麻豆精品国产91久久久无需广告 | 久久久久久久久久久av | 久久99精品久久 | 国产九色在线播放九色 | 久久久久久久久久亚洲精品 | 激情大乳女做爰办公室韩国 | 色综合777|