Ошибка типа: отправка не является функцией — сохраняется при повторном входе в систему

#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. Кроме того, я предлагаю вам включить полные ошибки.