Вы можете использовать Ref с useImperativeHandle
, чтобы разрешить родителям доступ к дочернему состоянию
const Parent = () => {
const childRef = useRef(null);
...
return (
<Modal
saveHandler={ () => {
// Get child state here to do some stuff with
console.log(childRef.current.state);
}} ... >
<Child ref={childRef} ... />
</Modal>
)
}
const Child = (props, ref) => {
const [state, dispatch] = useReducer(reducer, []);
useImperativeHandle(ref, () => ({
state
}), [state])
...
}
export default forwardRef(Child);
Несмотря на то, что вы можете делать то, что вы хотите, с помощью приведенного выше кода, рекомендуется поднять состояние до родительского компонента и передать его как реквизиты дочернему
const Parent = () => {
const [state, dispatch] = useReducer(reducer, []);
...
return (
<Modal
saveHandler={ () => {
// Get child state here to do some stuff with
console.log(state);
}} ... >
<Child state={state} dispatch={dispatch} ... />
</Modal>
)
}
const Child = ({state, dispatch}) => {
...
}