#javascript #reactjs #typescript #redux
#javascript #reactjs #typescript #повторно
Вопрос:
Я пытаюсь заставить пользователя не выходить из системы после того, как он вошел в систему. Поэтому я помещаю токен в localStorage и пытаюсь выполнить то же действие, которое устанавливает токен состояния при входе в систему при каждом обновлении в компоненте высшего класса «Приложение».
Вот код из App.js:
import React, {FunctionComponent, useEffect} from 'react';
import {BrowserRouter as Router, Route, Switch} from 'react-router-dom';
import {AuthenticatedRoute} from './components/AuthenticatedRoute/AuthenticatedRoute';
import {Layout} from './components/Layout/Layout';
import {GlobalStyle} from './GlobalStyle';
import {Add} from './routes/add';
import {Home} from './routes/home';
import {Logout} from './routes/logout';
import {StateProvider} from './state/StateProvider';
import {useAppState} from './state/state.context';
import {ActionType} from './state/types/actions';
export const App: FunctionComponent = () => {
const {dispatch} = useAppState();
useEffect(() => {
let currentUser = localStorage.getItem('token');
let token;
if (currentUser !== null) {
token = JSON.parse(currentUser)
dispatch({type: ActionType.LOGIN, jwtToken: token});
}
}, []);
return (
<Router>
<GlobalStyle />
<StateProvider>
<Layout>
<Switch>
<Route exact={true} path="/" component={Home} />
<Route path="/login" component={Home} />
<AuthenticatedRoute path="/add" component={Add} />
<AuthenticatedRoute path="/logout" component={Logout} />
</Switch>
</Layout>
</StateProvider>
</Router>
);
};
(anonymous function)
src/App.tsx:22
19 | let token;
20 | if (currentUser !== null) {
21 | token = JSON.parse(currentUser)
> 22 | dispatch({type: ActionType.LOGIN, jwtToken: token});
| ^ 23 | }
24 | }, []);
25 |
Комментарии:
1.
dispatch is not a function
означает именно это. ВключитеuseAppState
код, поскольку он, похоже, не возвращает то, что вы думаете, что он делает.2. Кроме того, я предлагаю вам включить полные ошибки.