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

react父組件更改props子組件無(wú)法刷新原因及解決方法

 更新時(shí)間:2022年09月08日 14:46:33   作者:奉先何在2019  
使用過(guò)vue的朋友都知道,vue父組件更改props的值,子組件是會(huì)刷新的,而react就未必,今天通過(guò)一個(gè)例子給大家介紹react父組件更改props子組件無(wú)法刷新原因,需要的朋友可以參考下

項(xiàng)目場(chǎng)景:

使用過(guò)vue的朋友都知道,vue父組件更改props的值,子組件是會(huì)刷新的,而react就未必。
先看以下例子:

1、創(chuàng)建父組件

antd-mobile依賴(lài)需要自行引入

export default class Parent2 extends Component {
    constructor(props){
        super(props)
//初始化state
        this.state={
            parentVal: 10,
        }
    }

    count=1
    handleClick=()=>{
        this.setState({
            parentVal:this.state.parentVal+1
        })
    }

    changeCount=()=>{
        this.count=this.count+1
        console.log(this.count)
    }

    componentDidMount() {
        console.log("父組件生命周期======:Mount")
    }

    //掛載完成后更新?tīng)顟B(tài)值,render()結(jié)束后會(huì)執(zhí)行componentDidUpdate()鉤子函數(shù)
    componentDidUpdate(prevProps, prevState, snapshot) {
        console.log("父組件生命周期======:Update")
    }

    componentWillUnmount() {
        console.log("父組件生命周期======:Unmount")
    }
    render() {
        console.log("父組件生命周期======:render")
        return (
            <div>
                父組件
                <p>{this.state.parentVal}</p>
                <Divider>分割線</Divider>

                <Button   color='primary' size='small' onClick={this.handleClick}>更改state的值</Button>
                <p>父組件調(diào)用setState()時(shí),子組件也會(huì)執(zhí)行render()方法,</p>
                <Button   color='primary' size='small' onClick={this.changeCount}>更改count的值</Button>



                <Child2 number={this.state.parentVal} count={this.count}/>
            </div>

        )
    }
}

2、創(chuàng)建子組件

export default class Child2 extends Component {

    constructor(props){
        super(props)
    }
    componentDidMount() {
        console.log("子組件生命周期======:Mount")
    }
    //掛載完成后更新?tīng)顟B(tài)值,render()結(jié)束后會(huì)執(zhí)行componentDidUpdate()鉤子函數(shù)
    componentDidUpdate(prevProps, prevState, snapshot) {
        console.log("子組件生命周期======:Update")
    }

    componentWillUnmount() {
        console.log("子組件生命周期======:Unmount")
    }
    render() {
        console.log("子組件生命周期======:render")
        return (
            <div style={{background:'yellow',padding:20}}>
               <p>父組件state中傳值:{this.props.number}</p>
                <p>父組件非state中傳值:{this.props.count}</p>
            </div>

        )
    }
}

問(wèn)題描述

這里有兩個(gè)變量,一個(gè)count,不是父組件state中的值,一個(gè)numer是父組件state中的值。

點(diǎn)擊更改‘更改state的值’按鈕,父子組件同步刷新,而點(diǎn)擊更改count的值按鈕,子組件不會(huì)刷新

原因分析:

父組件更改count的值,雖然父組件count值改變,但是不會(huì)更改子組件的值,props是單向傳遞的

情況組件掛載生命周期鉤子函數(shù)執(zhí)行控制臺(tái)打印數(shù)據(jù)

在這里插入圖片描述


父組件執(zhí)行setState()結(jié)果:

在這里插入圖片描述

  • 要想讓子組件更新dom,必須讓子組件執(zhí)行render()方法,而父組件執(zhí)行render()方法后,子組件也會(huì)執(zhí)行render()方法,這就是為何父組件調(diào)用了setSate()方法,子組件會(huì)刷新。
  • 當(dāng)更改了count的值,比如count連續(xù)加1,變成了9,此時(shí)父組件調(diào)用this.setState()更改狀態(tài)值,

此時(shí)子組件的count也變成了9,因?yàn)閏ount并沒(méi)有清除,父子組件又先后調(diào)用了render()方法,因此渲染上了最新的props的屬性值

如果子組件是函數(shù)組件,則render后,count值會(huì)變?yōu)槌跏贾?,那么父組件setState()之后,子組件render()函數(shù)執(zhí)行時(shí)收到的還是最初的值,這和子組件是類(lèi)組件有區(qū)別,大家可以自己嘗試,

解決方案:

如果想要傳遞子組件的props改變后刷新子組件dom,就要將父組件的state中的值傳給子組件,而不是將普通的變量傳遞給子組件

vue更改props的值子組件會(huì)刷新,因?yàn)関ue中傳遞給props的值也是父組件狀態(tài)中的變量

到此這篇關(guān)于react父組件更改props子組件無(wú)法刷新原因的文章就介紹到這了,更多相關(guān)react父組件更改props子組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 2個(gè)奇怪的react寫(xiě)法

    2個(gè)奇怪的react寫(xiě)法

    大家好,我卡頌。雖然React官網(wǎng)用大量篇幅介紹最佳實(shí)踐,但因JSX語(yǔ)法的靈活性,所以總是會(huì)出現(xiàn)奇奇怪怪的React寫(xiě)法。本文介紹2種奇怪(但在某些場(chǎng)景下有意義)的React寫(xiě)法。也歡迎大家在評(píng)論區(qū)討論你遇到過(guò)的奇怪寫(xiě)法
    2023-03-03
  • 在React中實(shí)現(xiàn)txt文本文件預(yù)覽的完整指南

    在React中實(shí)現(xiàn)txt文本文件預(yù)覽的完整指南

    在前端開(kāi)發(fā)中,從遠(yuǎn)程 URL 加載并預(yù)覽文本文件是一項(xiàng)實(shí)用且常見(jiàn)的功能,今天,我將帶你深入剖析一個(gè) React 組件 TextViewerURL,它通過(guò) URL 加載文本文件,支持多種編碼),并搭配精心設(shè)計(jì)的樣式,讓文本展示更美觀、交互更友好,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2025-03-03
  • React中使用Mobx的方法

    React中使用Mobx的方法

    Mobx是一個(gè)前端“狀態(tài)管理框架”,狀態(tài)管理就是將分布在各個(gè)組件、各個(gè)模塊中的狀態(tài)的變化,按照一定的規(guī)則,進(jìn)行統(tǒng)一的管理,這篇文章主要介紹了React中如何使用Mobx,需要的朋友可以參考下
    2023-02-02
  • React實(shí)現(xiàn)類(lèi)似于Vue中的插槽的項(xiàng)目實(shí)踐

    React實(shí)現(xiàn)類(lèi)似于Vue中的插槽的項(xiàng)目實(shí)踐

    本文主要介紹了React實(shí)現(xiàn)類(lèi)似于Vue中的插槽的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • React實(shí)現(xiàn)控制減少u(mài)seContext導(dǎo)致非必要的渲染詳解

    React實(shí)現(xiàn)控制減少u(mài)seContext導(dǎo)致非必要的渲染詳解

    這篇文章主要介紹了React如何有效減少使用useContext導(dǎo)致的不必要渲染,使用useContext在改變一個(gè)數(shù)據(jù)時(shí),是通過(guò)自己逐級(jí)查找對(duì)比改變的數(shù)據(jù)然后渲染,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • react的context和props詳解

    react的context和props詳解

    這篇文章主要介紹了react的context和props的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-11-11
  • 詳解如何使用React Hooks請(qǐng)求數(shù)據(jù)并渲染

    詳解如何使用React Hooks請(qǐng)求數(shù)據(jù)并渲染

    這篇文章主要介紹了如何使用React Hooks請(qǐng)求數(shù)據(jù)并渲染,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • React?高階組件與Render?Props優(yōu)缺點(diǎn)詳解

    React?高階組件與Render?Props優(yōu)缺點(diǎn)詳解

    這篇文章主要weidajai?介紹了React?高階組件與Render?Props優(yōu)缺點(diǎn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 深入研究React中setState源碼

    深入研究React中setState源碼

    這篇文章主要介紹了深入研究React中setState源碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • 解決React報(bào)錯(cuò)Style prop value must be an object

    解決React報(bào)錯(cuò)Style prop value must be a

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Style prop value must be an object解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

乐都县| 富锦市| 琼结县| 抚顺县| 咸宁市| 儋州市| 天水市| 凤城市| 大庆市| 潞西市| 乐亭县| 黄陵县| 普兰县| 曲靖市| 石屏县| 临武县| 林州市| 永定县| 宿州市| 大同县| 都兰县| 罗江县| 崇左市| 龙口市| 高碑店市| 柘荣县| 印江| 泽普县| 潜江市| 台东市| 阿克陶县| 茂名市| 比如县| 鸡西市| 汉寿县| 景谷| 汕头市| 平陆县| 青阳县| 乐都县| 克拉玛依市|