получение неопределенного в реквизитах при использовании mapStateToProps - PullRequest
0 голосов
/ 03 ноября 2018

Я получаю эту ошибку так долго, и я не знаю, как это исправить

Компонент PrivateRoute, который получает неопределенное значение из хранилища при использовании mapstatetoprops

import React from 'react';
import { connect } from 'react-redux';
import { Route, Redirect } from 'react-router-dom';


export const PrivateRoute = ({ isAuthenticated, component: Component, ...rest}) => (
    <Route {...rest} component={(props) => (
        isAuthenticated ? (
            <Component {...props} />
            ) : (
            <Redirect to="/" />
            )
    )} />
);


const mapStateToProps = (state) => {
  return {
    isAuthenticated: !!state.auth.uname
  };
};
export default connect(mapStateToProps)(PrivateRoute);

Компонент AppRouter, который использует PrivateRoute для сокрытия некоторых секретных маршрутов от несанкционированного доступа.

import React from 'react';
import { Router, Route, Switch} from 'react-router-dom';
import createHistory from 'history/createBrowserHistory';
import Nav from '../components/navigation/nav';
import Index from '../components/index';
import SignIn from '../components/signin/signin';
import Register from '../components/register/register';
import Home from '../components/home/home';
import { PrivateRoute } from './PrivateRoute';

export const history = createHistory();

const AppRouter = () => {
    return(
    <Router history={history}>
        <div>
            <Nav />
              <Switch>
                <Route exact path='/' component={Index} />
                <Route path='/signin' component={SignIn}/>
                <Route path='/register' component={Register}/>
                <PrivateRoute path='/home' component={Home}/>
              </Switch>
        </div>
    </Router>
    );
}

export default AppRouter;

Магазин упаковки Index.js в провайдере

import React from 'react';
import ReactDOM from 'react-dom';
import { connect } from 'react-redux';
import { Provider } from 'react-redux';
import 'tachyons';
import './index.css';
import App from './App';
import configureStore from './store/configStore';
import * as serviceWorker from './serviceWorker';



const store = configureStore();



const jsx = (
    <Provider store={store}>
        <App />
    </Provider>
    )
ReactDOM.render(jsx, document.getElementById('root'));


serviceWorker.unregister();

Auth Reducer

    const INIIAL_STATE = {isLoginSuccess: true, uname: '' }


export default (state = INIIAL_STATE, action) => {
    switch (action.type) {
        case 'LOGIN':
            return {
                uname: action.uname
            };
        case 'LOGIN_SUCCESS':
            return {
                isLoginSuccess: action.isLoginSuccess
            };
        case 'LOGOUT':
            return {};
        default: 
            return state;
    }
};

Action Creator

import configureStore from '../store/configStore';
import { history } from '../routers/AppRouter';

const store = configureStore();

export const setLoginSuccess = (isLoginSuccess) => {
    return {
        type: 'LOGIN_SUCCESS',
        isLoginSuccess
    };
}
export const login = (uname) => {
    return{
    type: 'LOGIN',
    uname
    };
}


export const logout = () => {
    return{
    type: 'LOGOUT'
    };
}




export const startLogin = (username, password) => {
    return() => {
        fetch('http://localhost:3000/signin' , {
      method: 'post',
      headers: {'Content-Type': 'application/json'},
      body: JSON.stringify({
            username: username,
            password: password
          })
        }).then(response => response.json())
          .then(
            user => {
            if(user) {
                store.dispatch(login(user.username));
                store.dispatch(setLoginSuccess(true));
                if(history.location.pathname === '/signin')
                {
                    history.push('/home');
                }
            }
        })
        .catch(err => {console.log(err)});
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...