簡體   English   中英

reactjs:當父道具更新時如何更新子 state

[英]reactjs: how to update the child state when parent props are updated

我從子組件更新父組件,作為回報,我從父組件獲取新的道具,然后我希望子 state 根據道具進行更新。

    export default function ParentCompnent(){
        [name,setName] = useState("test")

        function setNameMod(){
            setName(some random name)
        }
        render(
            <>
            <ChildComponent name=name setNameMod=setNameMod />
            </>
        )

    }


    function ChildComponent(props){
        {name,setNameMod} = props
        [steps,setSteps] = useState(getSteps(name))
        getSteps(name){
            .....
            return some_array
        }

        function refreshSteps(){
            setNameMod()

            setSteps(getSteps(name))
            // i am expecting new name from parent be used here
            // but it looks the old name is being used.
        }

        render(
            <>
            <button onclick={()=>refreshSteps()}>Refresh</button>
            steps.map(....)
            </>


            )
    }

我可以將步驟放在父級中並作為道具傳遞。 但我想把邏輯放在一個地方

現在我可以這樣做嗎

在 useEffect() 中嘗試setSteps() useEffect() 它應該像 Class 組件的ComponentDidUpdate()一樣工作。 useEffect ,我們應該發送參數以進行更改,我們的 state 應該得到更新。 因此,每當更新name時,反射都會在 setSteps() 上。

useEffect(()=> setSteps(getSteps(name)), [name]);

要在更新道具時更新子組件,您必須使用 useEffect 掛鈎。 您可以在 ChildComponent 中添加掛鈎:

useEffect(() => {
   setSteps(getSteps(name));
}, [name]);

您還應該將初始步驟設置為空數組,以避免重復調用 getSteps。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM