当父状态改变时重新渲染子组件并改变子状态

时间:2021-04-19 16:44:56

标签: reactjs react-hooks

我有一个父组件,它的状态包含一个对象数组:

function ParentComponent(props) {
    const [objects, setObjects] = React.useState([...props.objects]);

    const handleObjectRefresh = () => {
        /**
         * Refresh objects
         */
        setObjects([
            ...newObjects
        ])
    }

    return (
        <div>
            <Button onClick={handleObjectRefresh} >Refresh</Button>
            {objects.map((obj, index) => {
                return(
                    <ChildComponent obj={obj} />
                )            
            })
        }
        </div>
    )
}

function ChildComponent(props){
    const [objParam1, setObjectParam1] = React.useState(props.obj.param1);
    const [objParam2, setObjectParam2] = React.useState(props.obj.param2);

    useEffect(()=> {
        setObjectParam1(props.obj.param1);
        setObjectParam2(props.obj.param2);
    }, [props.obj])

    return (
        <div>
            <Texfield defaultValue={objectParam1}/>
            <Texfield defaultValue={objectParam2}/>
        </div>
    )
}

我现在的问题是,如果删除对象,Textfield 的当前默认值不会更新,但是子组件中的对象确实发生了变化,文本字段默认值是以前的状态,我想知道当父组件中的对象列表发生变化时,如何彻底改变子状态?

编辑

为了解决这个问题,我只是将 defaultValue 改为 value

0 个答案:

没有答案