2017-09-19 32 views
0

私は単純なRedux Reactテスト作業をしようとしています。私はReduxとReactの両方に本当に新しいです。私はReduxのドキュメントとTroubleshootingセクションで読んできましたが、それは減速機が毎回新しいオブジェクトを返す必要があると言いました。私の場合、私は新しいオブジェクトを返すと思います...Reduxは状態変更時にReactコンポーネントを更新しません

何か提案がありがとう!

マイ減速:

const memberOpReducer = (state = {isLoading: true, isLoggedIn: false}, action) => { 
    switch(action.type) { 
    case 'CHECK_LOGIN_STATUS': 
     return { 
     isLoading: true 
     } 
    case 'LOGIN_STATUS': 
     return { 
     isLoading: false, 
     isLoggedIn: action.response.status === 'connected', 
     response: action.response 
     }; 
    default: 
     return state; 
    } 
}; 

私のアクション:

const checkLoginStatus =() => ({ 
    type: 'CHECK_LOGIN_STATUS' 
}); 

const loginStatus = response => ({ 
    type: 'LOGIN_STATUS', 
    response: response 
}); 

const getLoginStatus = (options = {}) => dispatch => { 
    dispatch(checkLoginStatus()); 
    FB.getLoginStatus(function (response) { 
    dispatch(loginStatus(response)); 
    }, options); 
} 

この作業ペンを見てください:https://codepen.io/mrducnguyen/pen/rGxpGR

答えて

1

問題は、あなたのmapStateToProps機能である:

// Your function, just for reference 
const mapStateToProps = state => { 
    return { 
    isLoggedIn: state.isLoggedIn === undefined ? false : state.isLoggedIn, 
    isLoading: state.isLoading === undefined ? true : state.isLoading, 
    response: state.response 
    } 
} 

state.isLoggedInにアクセスしていますが、combineReducersを使用して、そのレデューサーのすべてのフィールドにレデューサーの名前の名前を付けたので、state.memberOpReducer.isLoggedInにアクセスする必要があります。もちろん、他のすべての分野にも同じです。

// Fixed version 
const mapStateToProps = state => { 
    return { 
    isLoggedIn: state.memberOpReducer.isLoggedIn, 
    isLoading: state.memberOpReducer.isLoading, 
    response: state.memberOpReducer.response 
    } 
} 
+0

愚かな私...大変ありがとうございました:) –

関連する問題