useContext с useReducer всегда возвращает пустое состояние, пока не будет отправлено действие заполнения состояния - PullRequest
0 голосов
/ 06 августа 2020

Я хочу получить из данных состояния, которые я там установил.

код хранилища:

import React, { createContext, useContext, useReducer } from "react";
import { PatientEntry } from "../types";

import { Action } from "./reducer";

export type State = {
  patients: { [id: string]: PatientEntry },
  patient: undefined|PatientEntry
};

const initialState: State = {
  patients: {},
  patient:undefined
};

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);

код установки и получения.

const [state, dispatch] = useStateValue();
React.useEffect(() => {
 const fetchPatient = async () => {
      try {
{
const { data: patientFromApi } = await axios.get<PatientEntry>(`${apiBaseUrl}/patients/${id}`);





console.log("before dispatch")
console.log(state)

        dispatch({ type: "SET_PATIENT", payload: patientFromApi });
        console.log(Object.keys(patientFromApi))

}

      } catch (e) {
        console.error(e);
      }
    };
    fetchPatient();


  }, [dispatch]);

Состояние всегда является начальным состоянием, когда я перехожу на эту страницу, каждый раз, когда мне нужно сначала установить там данные, прежде чем я смогу их получить. Как просто получить?

Даже контекстный потребитель не помогает

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