在Reducer中设置值时,道具未按预期更新

时间:2018-11-14 03:08:15

标签: javascript react-native redux

在测试新创建的动作和减速器时遇到了这个问题。即使我在reducer中将其设置为固定值,Prop也不会被更新。这是我在测试中执行的代码。

组件:

class <ComponentName> extends Component {

    componentDidMount() {
        login()
    }

    render() {
        if(this.props.isLogged) 
            return (
                <App/>    
            );
        else 
            return (
                <ErrorScreen/>
            );
    }    
}



function mapStateToProps(state) {
    return {
      isLogged:state.auth.isLogged
    }
}


const mapDispatchToProps = (dispatch) => {
    return {
        login: () => dispatch(login())
    };
};


export default connect(mapStateToProps,mapDispatchToProps)(<ComponentName>)

操作:

export function login() {
    return {
        type:"TEST"
    }
}

减速器:

const initState = {
    isLogged: false,

}

export default (state=initState, action) => {
    switch(action.type) {
        case "TEST":
            return {
                ...state,
                isLogged: true
            }
            break;
    default:
        return state     
    }
} 

组合减速器:

import {combineReducers} from 'redux'
import AuthenticationReducer from './authenticationReducer'

export default combineReducers({
    auth: AuthenticationReducer
})

提供者:

import React, {Component} from "react";
import <ComponentName> from './app/screens/<ComponentName>'
import store from './app/store'
import {Provider} from 'react-redux'

export default () =>
<Provider store={store}>
  <<ComponentName>/>
</Provider>;

现在尝试调试几个小时。我完全不知道为什么会这样。也许我执行错误?我不知道了如果有些文件我忘了包括在内,请通知我。感谢,并有一个愉快的一天!

1 个答案:

答案 0 :(得分:3)

代码无法按预期运行的原因是因为您正在调用login()动作创建者,而不是从login()返回(并注入到{{1}的mapDispatchToProps())。

尝试通过在调用props之前添加<ComponentName/>来修改代码,如下所示:

this.props