В компоненте, если я выполняю
const [state, dispatch] = useStateValue();
, тогда состояние - это просто начальное состояние.
до, во время и после useEffect все состояние пусто. Это всегда исходное состояние. Только после того, как установка новых данных в состояние отправляется в обработчике useEffect (с [dispatch] в качестве второго параметра), что-то находится в состоянии
Затем я обновляю страницу или перехожу на другую страницу и обратно, и состояние снова становится исходным.
Код:
import React, { createContext, useContext, useReducer } from "react";
import { PatientEntry } from "../types";
import { Action } from "./reducer";
export type State = {
patients: { [id: string]: PatientEntry };
};
const initialState: State = {
patients: {}
};
export const StateContext = createContext<[State, React.Dispatch<Action>]>([
initialState,
() => initialState
]);
type StateProviderProps = {
reducer: React.Reducer<State, Action>;
children: React.ReactElement;
};
export const StateProvider: React.FC<StateProviderProps> = ({
reducer,
children
}: StateProviderProps) => {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<StateContext.Provider value={[state, dispatch]}>
{children}
</StateContext.Provider>
);
};
export const useStateValue = () => useContext(StateContext);
, и если я использую в качестве второго параметра useEffect пациента, то страница перезагружается бесконечное количество раз, даже если пациент меняется только один раз - когда его меняет отправка
Мне просто нужно получить доступ к состоянию со всем, что там есть. Не сохранять в него новые данные каждый раз, когда они мне нужны
даже Provider.Consumer дает начальное состояние и даже если контекст прошел через опору.
Заключение: измененное состояние никогда не сохраняется