2017-11-11 29 views
3

我是新與反應母語和終極版,我想知道我怎樣才能發出後更新狀態後,得到國家更新中...如何調度

按照我的代碼:

/LoginForm.js

function mapStateToProps(state) { return { user: state.userReducer }; } 

function mapDispatchToProps(dispatch) { 
    return { 
    login: (username, password) => {  
     dispatch(login(username, password)); // update state loggedIn 
    } 
    } 
} 

const LoginForm = connect(mapStateToProps, mapDispatchToProps)(Login); 
export default LoginForm; 

/Login.js ---在這裏,我一個按鈕,調用此方法loginOnPress()

loginOnPress() { 
    const { username, password } = this.state; 
    this.props.login(username, password); 
    console.log(this.props.user.loggedIn) 
    } 

根據上述我的代碼,我稱第一方法'this.props.login(用戶名,密碼);',它調用調度並更改狀態'loggedIn'。

此後,我試圖讓狀態更新,但沒有成功:

console.log(this.props.user.loggedIn) 

注:當我點擊第二次這個按鈕狀態變爲更新

+0

您應該檢查道具'componentWillReceiveProps'生命週期鉤子的變化,因爲當你在嘗試設置它們後檢查下一行的道具時,它們的變化可能還沒有傳播回你的組件。 – wostex

回答

1

函數this.props.login(username, password)在redux狀態上分派登錄操作。

啓動store.getState()確實會立即讓你更新後的終極版狀態,但通常情況下,你並不真正需要做的,因爲它包裝你的組件終極版connect功能。

終極版connect功能與新道具更新您的組件,所以你通常會做的是「捕獲」這些變化的react lifecycle以下功能之一:

class Greeting extends React.Component { 

    ... 

    loginOnPress() { 
    const { username, password } = this.state; 
    this.props.login(username, password); 
    } 

    // before the new props are applied 

    componentWillReceiveProps (nextProps) { 
    console.log(nextProps.user.loggedIn) 
    } 

    // just before the update 

    componentWillUpdate (nextProps, nextState) { 
    console.log(nextProps.user.loggedIn) 
    } 

    // immediately after the update 

    componentDidUpdate (prevProps, prevState) { 
    console.log(this.props.user.loggedIn) 
    } 

    render() { 
    ... 
    } 
} 
+0

這正是我所需要的,並感謝您的所有細節 –

1

呼叫調度會更新狀態立即但您的組件稍後會更新,以便您可以使用componentWillReceiveProps對道具中的更改作出反應,您可以看看here,以更好地解釋React中狀態更改的工作方式

+0

這正是我需要的! 感謝您的幫助 –