首页 文章

Redux不使用React-router

提问于
浏览
0

我正在使用以下内容:

反应v16.2.0,react-redux v5.0.7,react-router-dom v4.2.2,redux v3.7.2

我想要实现的是从 Auth 组件更新一些道具,当用户导航到 /user (加载 Userpage 组件)时,应显示修改过的道具 . 这是我的代码的简化版本:

在App.js中:

import React, { Component } from 'react';
import { Provider } from 'react-redux';
import Store from './components/Store';
import Home from './components/Home';
import Auth from './components/auth';
import Userpage from './components/Userpage';
import { BrowserRouter as Router, Route } from 'react-router-dom';

class App extends Component {

  render() {
    return (  
      <Provider store={Store}>    
        <Router>
          <div>
            <Route exact path="/" component={Home}/>
            <Route path="/login" component={Auth}/>
            <Route path="/user" component={Userpage}/>
          </div>
        </Router>
      </Provider>
    );
  }
}

export default App;

在Store.js中:

import { createStore } from 'redux';

const reducer = (state,action) => {
    if(action.type == 'TEST'){
        return Object.assign({},state,{test:action.payload.test});
    } else    
        return state;
}

export default createStore(reducer,{
    test:'DOES NOT WORK',
})

在Auth.js:

import React from 'react';
import { connect } from 'react-redux';
import Userpage from './Userpage';


class Auth extends React.Component {

    componentWillMount() {
        this.props.update('TEST',{test:'WORKS'});
    }

    render() {
        return(
            <div>
                <Userpage/>
            </div>
        );
    }
}

export default connect(
    (store) => {
        return store;
    },
    (dispatch) => {
        return {
            update:(dispatchType, dispatchPayload) => {
                dispatch({type:dispatchType,payload:dispatchPayload});
            }
        }
    }
)(Auth);

在Userpage.js中:

import React, { Component } from 'react';
import { connect } from 'react-redux';

class Userpage extends Component{
    componentDidMount(){
        console.log(this.props.test);
    }

    render(){
            return null;
    }
}

export default connect(
    (store) => {
        return store;
    }
)(Userpage);

现在,当我导航到/ login时,商店已更新, test 设置为"WORKS" . 但是,如果我导航到/ userpage, console.log(this.props.test) 打印"DOES NOT WORK",而不是更新的道具 .

为了测试,我在 Auth 的渲染功能中包含了 Userpage ,并且它正确地控制了日志"WORKS" .

那么为什么redux商店显然会在使用react-router导航到另一个页面时重置为默认值?我怎样才能解决这个问题?

1 回答

  • 0

    找到了解决方案 . 显然,当您手动导航(通过在浏览器中键入URL)时,整个应用程序会重新呈现,从而重置redux存储 .

    如react-router docs中所述使用 Link 或使用 this.props.history.push('/user') 重定向可以正常工作 .

相关问题