Я пытаюсь использовать React-хуки впервые и хочу в итоге заменить старый контекстный API. Как реализовать хуки useContext для достижения глобального состояния?
Я пытался следовать нескольким учебникам по Medium, другим постам с переполнением стека и некоторым случайным постам в блоге. Ниже приведен код, который у меня есть:
APP.JS
import React from 'react';
import { AppProvider, useAppValue } from './AppContext';
import FormLogin from './FormLogin';
import FormRegister from './FormRegister';
const App = () => {
const initialState = {
page: <FormLogin/>
}
const reducer = (state, action) => {
switch (action.type) {
case 'loadLogin':
return {
...state,
page: <FormLogin/>
};
case 'loadRegister':
return {
...state,
page: <FormRegister/>
};
default:
return state;
}
};
let { page } = useAppValue();
let currentPage = page ? page : <FormLogin/>
return (
<AppProvider initialState={initialState} reducer={reducer}>
<div className="App">
{currentPage}
</div>
</AppProvider>
);
}
export default App;
APPCONTEXT.JS
import React, { createContext, useContext, useReducer } from 'react';
export const AppContext = createContext();
export const AppProvider = ({reducer, initialState, children}) => (
<AppContext.Provider value={useReducer(reducer, initialState)}>
{children}
</AppContext.Provider>
);
export const useAppValue = () => useContext(AppContext);
Два компонента Form - это в основном фиктивные компоненты с минимальным количеством JSX.
Я получаю несколько ошибок «Ошибка типа: невозможно прочитать свойство« страница »с неопределенными» ошибками. Это неправильный способ использовать новый хук useContext?
В идеале я хочу, чтобы каждая форма имела ссылку, которая при нажатии изменяет вас на другую форму. Т.е., если вы находитесь в форме входа в систему, но должны зарегистрироваться, она изменится на форму регистрации, и если вы находитесь в форме регистрации, но у вас уже есть учетная запись, она переключит вас на форму входа.