У меня есть родительско-дочерний компонент Modal и ModalContent в моем приложении React, оба функциональны.
1) Я создал AppContext в приложении. js для доступа к нему глобально во всех компонентах.
const [state, dispatch] = useReducer(reducer, {modalOpen: false, content: []});
<AppContext.Provider value={{ state, dispatch }} >
//BrowserRouter and Routes Definition
</App>
Здесь reducer - довольно простая функция с переключением для modalOpen и функция push / pop в content (array).
2) My Modal
Component использует
const { state, dispatch } = useContext(AppContext);
<Modal open={state.modalOpen} />
, чтобы получить состояние модальной видимости для установите его открытым / закрытым.
3) Мой ModalContent
Компонент использует
const { state, dispatch } = useContext(AppContext);
<ModalContent data={state.content} />
//Dispatch from the `ModalContent`
dispatch({ type: 'UPDATE_CONTENT', data: 'newata' });
4) Вот мой редуктор.
export const reducer = (state, action) => {
switch (action.type) {
case 'TOGGLE_MODAL':
return {...state, modalOpen: !state.modalOpen};
case 'UPDATE_CONTENT':
return { ...state, content: [...state.content, action.data]};
default:
return {modalOpen: false,content: []};
}
}
Я установил введите код в ModalContent
, чтобы обновить свойство data content
с помощью диспетчеризации, и хранилище редуктора обновляется идеально и возвращает свежий / обновленный:
{modalOpen: true/false, content: updatedContentArray}
Проблема : всякий раз, когда Я отправляю действие через ModalContent
полное состояние возвращается (ожидается) редуктором, и Modal повторно открывается, когда он прослушивает state.modalOpen.
Неудачная попытка : Я попытался специально получить требуемые свойства в соответствующих компонентах. Но компонент Modal
по-прежнему выполняет повторную визуализацию, даже если изменяется только содержимое. Есть ли способ посмотреть на специфику c только состояние
Как можно сделать эту работу, только перерисовав ModalContent
не Modal
.
Изменить: обновлен вопрос с моим макетом (рабочим) кодом редуктора и заявлением об отправке из самого ModalContent.