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

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

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

項目場景:

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

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

antd-mobile依賴需要自行引入

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ài)值,render()結(jié)束后會執(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()時,子組件也會執(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ài)值,render()結(jié)束后會執(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>

        )
    }
}

問題描述

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

點擊更改‘更改state的值’按鈕,父子組件同步刷新,而點擊更改count的值按鈕,子組件不會刷新

原因分析:

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

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

在這里插入圖片描述


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

在這里插入圖片描述

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

此時子組件的count也變成了9,因為count并沒有清除,父子組件又先后調(diào)用了render()方法,因此渲染上了最新的props的屬性值

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

解決方案:

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

vue更改props的值子組件會刷新,因為vue中傳遞給props的值也是父組件狀態(tài)中的變量

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

相關(guān)文章

  • 2個奇怪的react寫法

    2個奇怪的react寫法

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

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

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

    React中使用Mobx的方法

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

    React實現(xiàn)類似于Vue中的插槽的項目實踐

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

    React實現(xiàn)控制減少useContext導(dǎo)致非必要的渲染詳解

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

    react的context和props詳解

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

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

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

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

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

    深入研究React中setState源碼

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

    解決React報錯Style prop value must be a

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

最新評論

汾阳市| 莆田市| 凤庆县| 南投县| 林甸县| 平顶山市| 平定县| 阜阳市| 新田县| 八宿县| 大连市| 孙吴县| 宝山区| 晋江市| 宁德市| 灌南县| 绥阳县| 常宁市| 泗阳县| 仁布县| 韶山市| 富蕴县| 昆明市| 舞阳县| 武平县| 蒙自县| 平山县| 察雅县| 介休市| 昂仁县| 寻甸| 贺州市| 大丰市| 新乡市| 娄烦县| 天峨县| 白水县| 克拉玛依市| 吴桥县| 阿坝县| 南康市|