Имеет ли смысл когда-либо поддерживать состояние внутри классов наряду с состоянием, управляемым контекстным API? - PullRequest
0 голосов
/ 08 июня 2019

Я иду по пути рефакторинга управления состоянием реагирования для использования Context API.

Я настроил базовый менеджер состояний и передаю контекст в файл конфигурации, который переходит в отдельные формы, чтобы избежать сверления реквизита.

State.js

import React, {createContext, useContext, useReducer} from 'react';
export const StateContext = createContext();
export const StateProvider = ({reducer, initialState, children}) => (
  <StateContext.Provider value={useReducer(reducer, initialState)}>
    {children}
  </StateContext.Provider>
);
export const useStateValue = () => useContext(StateContext);

Архитектура enter image description here

Выпуск

Я чувствую, что будет странно определять, откуда исходит состояние для каждого компонента, если у меня есть управление состояниями внутри компонентов и API контекста, но одна из вещей, которые мне нравятся в том, чтобы иметь состояние в каждом компоненте, это знать, к каким состояниям принадлежат этот компонент.

Вопрос

Имеет ли смысл когда-либо поддерживать управляемое состояние внутри компонентов наряду с контекстным API? Или я должен в конечном итоге провести рефакторинг всего штата, который будет управляться State.js

1 Ответ

0 голосов
/ 08 июня 2019

Если вы спросите меня, вы должны как можно больше управлять состоянием на уровне компонентов.Вы должны быть осторожны при использовании api контекста, так как вы будете перерисовывать каждый компонент, который является потребителем контекста, всякий раз, когда изменяется одно значение в контексте, что приводит к неэффективной работе приложения.Документация для контекста API касается этого.Это хорошо для управления такими вещами, как аутентификация пользователя или управление цветами тем и вещами, которые не сильно меняются, но не для быстро меняющихся значений или сложных хранилищ.Таким образом, управление состоянием в компоненте формы, например, когда вы изменяете состояние при каждом нажатии клавиши, должно управляться на уровне компонента.высокая частота.Но если у вас есть сложное хранилище, соединяющее множество компонентов, вам не стоит использовать контекстный API, и вы действительно должны пойти на что-то вроде приставки.Это довольно сложно настроить, но вы не получаете постоянный повторный рендеринг каждого потребительского компонента, как это было бы с контекстным API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...