【问题标题】:Access State in Store From Routing Setup File [react-router v4 + redux-thunk]路由设置文件中存储中的访问状态 [react-router v4 + redux-thunk]
【发布时间】:2018-12-27 23:02:57
【问题描述】:

我目前正在开发一个 ReactJS Web 应用程序(新手)。我正在使用 react-router v4 和 redux-thunk。

我想知道如何从我的routes.js 文件中的商店访问状态的当前值。从商店返回的值是“真”或“假”。我想访问该状态值,以验证 routes.js 文件中常量 PrivateRoute 中的“auth_status === true”条件。

简而言之,我的authActions.js 文件中名为verifyAuth 的操作是从我的Login.js 文件中调度的。有效载荷从那里设置为“true”或“false”。我想从我的authReducer.js 文件中检索isAuthenticated

来自我的文件index.js(主)、routes.jsindex.js(减速器)和authReducer.js 的样本:

index.js(主)文件:

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import Routes from './main/routes';
import store from './main/store';

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

routes.js文件:

    import React from 'react';
    import { BrowserRouter as Router, Switch, Route, Redirect } from 'react-router-dom';
    import Login from './login';
    import App from './App';
    import MainHome from '../pages/home/home';

    const PrivateRoute = ({ component: Component, layout: Layout, ...rest }) => (
      <Route {...rest} render={(props) => (
        **auth_status === true**
        ? <Layout>
            <Component {...props}/>
          </Layout>
        : <Redirect to={{
          pathname: '/'
        }}/>
      )}/>
    );

    const Routes = () => (
      <Router>
        <Switch>
          <Route exact path="/" component={Login}/>
          <PrivateRoute path="/home" layout={App} component={MainHome}/>
        </Switch>
      </Router>
    );

export default Routes;

index.js(减速器)文件:

import { combineReducers } from 'redux';
import authReducer from './authReducer';

export default combineReducers({
  auth: authReducer
});

authReducer.js文件:

import { VERIFY_AUTH } from '../actions/actionsType';

const initialState = {
  isAuthenticated: false
};

export default function (state = initialState, action) {
  switch (action.type) {
    case VERIFY_AUTH: {
      return {
        ...state,
        isAuthenticated: action.payload }
    }
    default: {
      return state;
    }
  }
};

谢谢!

【问题讨论】:

    标签: reactjs redux react-redux react-router-v4 redux-thunk


    【解决方案1】:

    首先你需要将你的组件连接到 Redux Store。首先导入connect方法:

     import connect from "react-redux"
    

    然后使用 connect 方法将您的 PrivateRoute 连接到 Store。

    PrivateRoute = connect(mapStateToProps)(PrivateRoute )
    

    然后创建 mapStateToProps 方法。它将“映射”状态以获取您需要的道具。

    const mapStateToProps = state => {
      return {
        auth_status : state.auth.isAuthenticated
      }
    }
    

    从现在开始,您的组件 PrivateRoute 将可以访问属性“auth_status”,该属性在您商店的 auth 属性中具有您的“isAuthenticated”值。

    希望对你有帮助。

    【讨论】:

    • 它不起作用:“未捕获的类型错误:无法读取未定义的属性 'auth_status'”
    • 嗨,朱莉娅,看看这个代码和框.io 的例子:codesandbox.io/s/q768v52vr6
    • 嗨西尔维奥,谢谢。它部分工作:我不知道为什么,但我的侧边菜单存在一些错误,这些配置用于私有路由。它无法正常工作,但没有私有路由配置,它可以按预期工作。
    • 嗨,朱莉娅,如果您可以提供代码的 sn-p,或者理想情况下,提供问题发生的 sn-p,我可能会提供更大的帮助。
    • 嗨 Silvio,我在这里解释了我的问题:stackoverflow.com/questions/51498568/…
    猜你喜欢
    • 2016-06-21
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2020-11-05
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多