2017-07-25 110 views
0

我有登录页面组件,其中我有一个布尔状态称为isUserAuthenticated,当我点击登录按钮,检查userslist是否用户是否存在。用户列表在signupreducer中,我如何访问loginreducer中的用户列表并从中返回isUserAuthenticated标志。如何访问其他reducer减速器的状态减少

LoginPage组件

export const mapStateToProps = (state) => { 
    return { 
     isUserAuthenticated: state.reducer.isAuthenticated.isUserAuthenticated, 
     users: state.SignupReducer.users 
    } 
} 

export const mapDispatchToProps = (dispatch) => { 
    return { 
     checkLogin: (credentials) => dispatch({ type: 'CHECK_LOGIN', credentials }) 
    } 
}; 

LoginPage = connect(mapStateToProps, mapDispatchToProps)(LoginPage); 

export default LoginPage; 

登录减速

const initialStateAuth = { 
    isUserAuthenticated: false 
}; 

export const isAuthenticated = (state = initialStateAuth, action) => { 
    switch (action.type) { 
     case 'CHECK_LOGIN': 
      return Object.assign({}, state, { isUserAuthenticated: checkLogin(state, action) }) 
     default: 
      return state; 
    } 
} 

这里其实我想检查用户在 singupReducer.users我怎么可以在这里访问....

const checkLogin = (state, action) => { 
    let isExist = false; 
    signupReducer.users.map((each) => { 
     if (each.userName === action.credentials.username && each.password === action.credentials.password) { 
      isExist = true; 
     } 
    }); 
    return state.isUserAuthenticated = false; 

} 
+0

看来你有拼写问题。有时你使用'singupReducer'或'SignupReducer'。 –

+0

@DamienGold有史以来什么,但我只用在一个地方,这不是我刚才提到的“signupReducer”。我的问题是我怎样才能访问其他reducer状态在特定的reducer。谢谢 – kumar

回答

0

还有另外一种方式,如果你不想减速器之间共享数据。为了达到这个目的,你可以使用getState,并且在你发送给需要它的减速器的动作中加入你需要的状态。这里有一个例子:Alternative to sharing data between slice reducers

function someSpecialActionCreator() { 
    return (dispatch, getState) => { 
     const state = getState(); 
     const dataFromB = selectImportantDataFromB(state); 

     dispatch({ 
      type : "SOME_SPECIAL_ACTION", 
      payload : { 
       dataFromB 
      } 
     }); 
    } 
} 
+0

有没有办法做到这一点,而不写任何自定义函数 – kumar

+0

不写任何自定义函数?否:(你至少需要'mapDispatchToProps','连接'你的组件,有'actionCreators'和'reducer'来处理状态更新。 –

0

我不喜欢这样我可以现在访问和它的工作,任何人都建议我是这样做的正确方法。

export const mapStateToProps = (state) => { 
    return { 
     isUserAuthenticated: state.reducer.isAuthenticated.isUserAuthenticated, 
     users: state.SignupReducer.users 
    } 
} 

在这里,我选择了mapStateToProps其他减速状态的话,我在我的单击事件准备下课这样

onLogin =() => { 
     var credentials = { 
      username: this.userName, 
      password: this.password 
     } 
     var loginFormData ={ 
      credentials:credentials, 
      users:this.props.users 
     } 
     this.props.checkLogin(loginFormData); 
    } 

最后我正在我的派遣行动,登录credentilas形式和状态

export const mapDispatchToProps = (dispatch) => { 
    return { 
     checkLogin: (loginFormData) => dispatch({ type: 'CHECK_LOGIN', loginFormData }) 
    } 
};