最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你搞懂React的函數(shù)組件

 更新時間:2023年06月16日 09:30:05   作者:何遇er  
React中函數(shù)式組件的基本意義是,組件實際上是一個函數(shù),不是類,下面就來給大家介紹一下關(guān)于React中函數(shù)組件的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

函數(shù)組件與類組件有什么區(qū)別?如果你對 React Hooks 有基本了解,在這里請拋開 React Hooks 回答這個問題。你的答案是函數(shù)組件沒有自己的 state,也沒有與類組件類似的生命周期概念嗎?在本小節(jié)不討論 state 和生命周期,先看一個函數(shù)調(diào)用的示例,代碼如下:

function getName(params: {name: string}) {
    const count = 0
    return params.name + '-' + count
}
getName({name: '何遇'})
getName({name: 'Bella'})

getName 是一個純函數(shù),不產(chǎn)生任何副作用,當(dāng)執(zhí)行結(jié)束,它的執(zhí)行上下文和活動對象會被銷毀,前后兩次調(diào)用互不影響。對于不使用任何 Hooks 的函數(shù)組件而言,它也是純函數(shù),那么函數(shù)組件前后兩次渲染你還能得出與前后兩次調(diào)用 getName 函數(shù)類似的結(jié)論嗎?

要對比函數(shù)組件和類組件的區(qū)別,下面用類組件和函數(shù)組件實現(xiàn)相同的功能,即:在瀏覽器顯示一個按鈕,點擊按鈕調(diào)用 props 中的方法去更新父組件的 state,隔 1s 之后打印 props.count 的值。類組件的代碼如下:

class ClassCom extends React.Component<Props, never> {
    render(): React.ReactNode {
        return (
            <button onClick={this.onClick}>這是類組件:刷新瀏覽器打開開發(fā)者工具再點擊</button>
        )
    }

    onClick = () => {
	 this.props.updateCount()
        // 隔1s之后打印this.props.count的值
        setTimeout(() => {
            console.log(this.props.count)
        }, 1000);
    }
}

函數(shù)組件的代碼如下:

function FuncCom(props: Props) {
    const onClick = () => {
        props.updateCount()
    // 隔1s之后打印props.count的值
        setTimeout(() => {
            console.log(props.count)
        }, 1000);
    }
    return (
        <button onClick={onClick}>這是函數(shù)組件:刷新瀏覽器打開開發(fā)者工具再點擊</button>
    )
}

FuncCom 和 ClassCom 組件的父級相同,代碼如下:

class FuncComVsClassCom extends React.Component<{},State> {
    state: State = {count: 0}
    render(): React.ReactNode {
        return (
            <>
                <FuncCom 
                    count={this.state.count}
                    updateCount={this.updateCount}
                />
                <ClassCom
                    count={this.state.count}
                    updateCount={this.updateCount}
                />
            </>
        )
    }
    updateCount = () => {
        this.setState((prevSate: State) => {
            return {count: prevSate.count + 1}
        })
    }
}

觀察上述代碼可以發(fā)現(xiàn)傳遞給 FuncCom 和 ClassCom 組件的 props 一樣,但在瀏覽器界面上點擊各自的按鈕,開發(fā)者工具打印的結(jié)果不一樣,F(xiàn)uncCom 組件打印的值為 0,ClassCom 組件打印的值為 1。

現(xiàn)在揭曉答案,點擊 FuncCom 和 ClassCom 組件中的按鈕都會使它們的父級重新渲染,從而導(dǎo)致 FuncCom 和 ClassCom 重新渲染。ClassCom 是類組件,它重新渲染不會創(chuàng)建新的組件實例,在 setTimeout 的回調(diào)函數(shù)中 this.props 拿到了最新的值。FuncCom 是函數(shù)組件,它重新渲染會創(chuàng)建新的執(zhí)行環(huán)境和活動變量,所以在其中訪問 props,不論何時拿到的都是調(diào)用 FuncCom 時傳遞給它的參數(shù),該參數(shù)不可變。

FuncCom 和 ClassCom 組件打印出不同的值,原因在于 props 不可變但類組件實例是可變的,訪問 this.props 將始終得到類組件最新的 props。將ClassCom 的 this.props 賦值給一個變量,在 setTimeout 的回調(diào)函數(shù)中,用該變量訪問 count 屬性能讓兩個組件打印出相同的值。

后續(xù)介紹React Hooks時將繼續(xù)介紹函數(shù)組件只得到本次渲染時 props 和 state 的值。

到此這篇關(guān)于一文帶你搞懂React的函數(shù)組件的文章就介紹到這了,更多相關(guān)React函數(shù)組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用React Router4實現(xiàn)的服務(wù)端直出渲染(SSR)

    利用React Router4實現(xiàn)的服務(wù)端直出渲染(SSR)

    這篇文章主要介紹了利用React Router4實現(xiàn)的服務(wù)端直出渲染(SSR),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • React.memo 實現(xiàn)原理解析

    React.memo 實現(xiàn)原理解析

    React.memo通過props淺比較或自定義函數(shù),結(jié)合Fiber優(yōu)化機(jī)制,跳過組件渲染及副作用,下面就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2025-09-09
  • React實現(xiàn)文件上傳和斷點續(xù)傳功能的示例代碼

    React實現(xiàn)文件上傳和斷點續(xù)傳功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了React實現(xiàn)文件上傳和斷點續(xù)傳功能的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • React Component存在的幾種形式詳解

    React Component存在的幾種形式詳解

    這篇文章主要給大家介紹了關(guān)于React Component存在的幾種形式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • React Redux使用配置詳解

    React Redux使用配置詳解

    react-redux是redux官方react綁定庫,能夠使react組件從redux store中讀取數(shù)據(jù),并且向store分發(fā)actions以此來更新數(shù)據(jù),這篇文章主要介紹了react-redux的設(shè)置,需要的朋友可以參考下
    2022-08-08
  • React?如何向url中添加參數(shù)

    React?如何向url中添加參數(shù)

    這篇文章主要介紹了React?如何向url中添加參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React antd tabs切換造成子組件重復(fù)刷新

    React antd tabs切換造成子組件重復(fù)刷新

    這篇文章主要介紹了React antd tabs切換造成子組件重復(fù)刷新,需要的朋友可以參考下
    2021-04-04
  • react antd-mobile ActionSheet+tag實現(xiàn)多選方式

    react antd-mobile ActionSheet+tag實現(xiàn)多選方式

    這篇文章主要介紹了react antd-mobile ActionSheet+tag實現(xiàn)多選方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 深入理解React合成事件

    深入理解React合成事件

    React的合成事件是一個跨瀏覽器統(tǒng)一的事件系統(tǒng),它基于原生DOM事件構(gòu)建,通過封裝不同瀏覽器的事件實現(xiàn)差異,為開發(fā)者提供一致的事件處理接口,具有一定的參考價值,感興趣的可以了解一下
    2026-01-01
  • 詳解React中父子組件數(shù)據(jù)傳遞和修改的方式及原理

    詳解React中父子組件數(shù)據(jù)傳遞和修改的方式及原理

    這篇文章主要為大家詳細(xì)介紹了React中父子組件數(shù)據(jù)傳遞和修改的方式及原理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04

最新評論

巨野县| 永济市| 河池市| 凌海市| 苍山县| 米泉市| 惠安县| 六安市| 丽水市| 泰兴市| 梨树县| 香港 | 凤台县| 梅州市| 汉源县| 望谟县| 都江堰市| 元朗区| 甘洛县| 榕江县| 会泽县| 台江县| 凤凰县| 确山县| 余江县| 尼勒克县| 霸州市| 卓尼县| 资兴市| 绥化市| 景洪市| 濉溪县| 苍溪县| 五常市| 庆阳市| 马山县| 芮城县| 波密县| 郸城县| 潞西市| 宁安市|