React和Redux架构审核

时间:2017-01-14 23:24:51

标签: reactjs react-native redux react-native-router-flux

我是全新的反应世界,我正在努力理解构建我的代码的最佳方式。

实际上,它是使用react-native-router-flux的反应本机,但我不相信这些会对这个问题产生任何影响。

我尝试设置这样的启动画面:

/* @flow */
'use strict';

import { connect } from 'react-redux';

import React, { Component } from 'react';

import { View, Text, Image } from 'react-native';

import { init } from "../core/auth/actions"

import { Actions } from 'react-native-router-flux';

const mapStateToProps = (state) => {
    return {
        isAuthenticated: state.authState.authenticated,
        showLock: state.authState.showLock
    }
}

class Splash extends Component {

    constructor(props) {
        super(props)
    }

    componentWillMount() {
        const {dispatch} = this.props;
        dispatch(init());
    }

    navigateToHome(){
        Actions.home();
    }

    navigateToLogin(){
        Actions.login();
    }

    render() {

        const { isAuthenticated, showLock } = this.props

        return (
            <View>
                {isAuthenticated &&
                    this.navigateToHome()
                }
                {showLock && this.navigateToLogin()}
            </View>

        );
    }

}

const connectedSplash = connect(mapStateToProps)(Splash)

export default connectedSplash;

当应用程序启动时,将渲染此场景,并调度init操作。 通过reducer后,它将状态更改为authenticated或showlock,然后我重定向到下一个场景。

这一切都完美无缺。但是我收到了以下警告:

  

警告:setState(...):在现有状态期间无法更新   转换(例如在render或其他组件内   构造函数)。渲染方法应该是道具的纯函数   州;构造函数的副作用是反模式,但可以移动   到componentWillMount

什么是推荐的类似方法?

在存储状态更改时调用方法?

1 个答案:

答案 0 :(得分:0)

不确定我是否有最好的方法,但这种方法对我来说似乎已经更好了:

    componentDidUpdate(){
    const { isAuthenticated, showLock } = this.props
    if (isAuthenticated){
        return this.navigateToHome();
    }

    if (showLock){
        this.navigateToLogin();
    }

}

render() {


    return (
        <View>

        </View>

    );
}