Вы должны поднять состояние , то есть вы должны определить свое состояние поверх обоих компонентов (в <ParentElement>
). Вы не можете действительно заморозить внутреннее состояние вашего компонента.
Вот минимальный пример:
const ParentElement= () => {
const [state1, setState1] = useState(true);
// ...
const [state99, setState99] = useState(false);
return (
<React.Fragment>
<AnotherElement state={{state1, state99}} />
<SomeHeavyElement state={{state1, state99}} />
</React.Fragment>
);
};
export default ParentElement;
const SomeHeavyElement= ({state}) => {
return (
<React.Fragment>
{/*some logic*/}
</React.Fragment>
);
};
export default SomeHeavyElement;
const AnotherElement= ({state}) => {
return (
<React.Fragment>
<dialog>
<SomeHeavyElement state={state} />
</dialog>
</React.Fragment>
);
};
export default AnotherElement;
Кроме того, когда у вас определено много useState
, вы можете useReducer
централизовать состояние вашего компонента. Кроме того, если вы хотите избежать детализации свойств, вы можете определить обработку своего состояния, используя контекст React API.