Аргумент, переданный useState
, является просто начальным состоянием. Передача prop
не означает, что state
будет синхронизирован с props
. Вы можете настроить эффект для отражения этих изменений в вашем местном состоянии.
В настоящее время ваши Modal
видят только visible
из локального состояния, изменение значения props
не приведет к изменению Modal
//Inside child
useEffect(() =>{
setVisible(props.visible)
},[props])
Почему следуетЯ использую props
вместо props.visible
там?
Массив зависимостей существует для сохранения синхронности, вы говорите react
:
"Эй, каждый раз, когда один из нихизменения значений запускают этот эффект. "
Проблема в том, что React
выполняет поверхностное сравнение (Object.is
) между старым и новым props
, каждый из которых render
открывает новый props
объектгенерируется, что именно то, что вызывает ваш эффект в первую очередь.
React не знает, как «реагировать» на вложенные изменения. Что действительно меняется здесь, так это props
, реакция не знает (и не волнует) о props.visible
, передача его как зависимости - это то же самое, что и передача []
Фактически передача props
поскольку зависимость бесполезна, так как props
меняет каждый рендер, вы можете опустить массив зависимостей, который будет вызывать эффект при каждом рендере
useEffect(() => {
setVisible(props.visible)
})