当Reducers更新状态

时间:2017-10-13 04:33:18

标签: javascript reactjs react-native react-router reducers

我正在使用reducer接收用户模型。第一个值为null(因为这是Reducers的行为方式 - 它意味着它正在等待并且还没有收到模型),第二个值是User模型本身。

当我得到第一个空值时,组件重定向到“IsNotSetUp”路径,但是当我得到第二个值时,组件将isUserSetUp prop显示为TRUE,但它不会重定向到“IsSetUp”路径?发生了什么事?

enter image description here

class App extends Component {
    state = { isUserSetUp: false }

    componentWillReceiveProps(nextProps) {
        if (nextProps.auth && nextProps.auth.isProfileSetUp) {
            this.setState({ isUserSetUp: true }, function() {
                console.log("This is when we receive the User model from the reducer");
            });
        }
        else {
            this.setState({ isUserSetUp: false });     
        }

    }

    componentDidMount() {
        this.props.fetchUser();
    }

    render() {
        return (
            <div className="container">
                <BrowserRouter>
                    <div>
                        <Header />
                        <Route exact path="/" component={Landing} />
                        <Route exact path="/dashboard" component={Dashboard} />

                        {/* Profile Set up */}
                        <Route exact path="/setup" render={() => 
                        (
                            this.state.isUserSetUp ? (
                                <Redirect to={'/IsSetUp'} />
                            ) : (
                                <Redirect to={'/IsNotSetUp'} />
                            )
                        )}
                     />
                    </div>
                </BrowserRouter>
            </div>
        );
    }
};

出了什么问题?什么是变通方法?我采取了什么更好的建议路径?

提前致谢,美丽;)

1 个答案:

答案 0 :(得分:0)

您可以使用hashHistory来实现此目的。

import {
  hashHistory
} from 'react-router';

/**
 * [update route of the application]
 * @param  {String} route [new route of the application]
 */
const updateRoute = (route) => {
  hashHistory.push(route);
};

updateRoute('/IsSetUp');
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.0/react-dom.min.js"></script>

如果有帮助,请告诉我。