у меня простой магазин
import React, { createContext, useReducer } from "react";
import Reducer from "./UserReducer";
const initialState = {
user: {},
error: null
};
const Store = ({ children }) => {
const [state, dispatch] = useReducer(Reducer, initialState);
return (
<Context.Provider value={[state, dispatch]}>
{children}
</Context.Provider>
);
};
export const Context = createContext(initialState);
export default Store;
Я обернул им свое приложение, как
<Store>
<ThemeProvider theme={Theme}>
<CssBaseline />
<Navbar />
<Wrapper>
<Profile />
</Wrapper>
</ThemeProvider>{" "}
</Store>
Также есть дополнительная настройка, где мои страницы аутентификации расположены в отдельной оболочке, поэтому я также обернул ее хранилищем.
вот код для этой оболочки (лишнее удалено).
import Store from "../../../context/Store";
export default function Wrapper({ children }) {
const classes = useStyles();
return (
<Store>
//different dumb containers opening
{children}
//different dumb containers closing
</Store>
);
}
Теперь, когда я пытаюсь получить доступ к контексту в дочернем компоненте, например
import React, { useContext } from "react";
import { Context } from "../../../context/Store";
import { SET_USER } from "../../../context/UserTypes";
function SignUp(props) {
const [state, setState] = React.useState({ ...initialState });
const [userData, dispatch] = useContext(Context);
console.log(userData, dispatch, "check");
// rest of component
я получаю следующую ошибку
TypeError: undefined is not a function
Я попытался зарегистрировать результат useContext, не разрушая его, но все, что у него было, было глобальным состоянием, но без функции отправки с ним.
Версия Reactjs = 17.0.1
Обновление: отправка доступна снаружи с помощью Authenticator HOC, но не внутри него, поэтому это может быть проблемой.
Открыл выпуск по усиленному репо.
Невозможно получить доступ к отправке из useContext из компонентов, заключенных в Authenticator