我无法解决这个问题。基本上,我有一个从状态中提取isFetching布尔值的组件

function mapStateToProps(state){
  const {errorMessage,isFetching} = state.signUp
  const {isAuthenticated,username} = state.login;
  return {
    isAuthenticated,
    errorMessage,
    isFetching,
    username
  }
}


我有以下减速器

export const signUp = (state={},action) => {
  switch(action.type){
    case SIGNUP_REQUEST:
      return Object.assign({},state,{
        isFetching: true
      })
    case SIGNUP_FAILURE:
      return Object.assign({},state,{
        isFetching:false,
        // isAuthenticated: false,
        errorMessage: action.message
      })
    default:
      return state
  }
}

export const login = (state={isAuthenticated:false},action) => {
  switch(action.type){
    case LOGIN_REQUEST:
      return Object.assign({},state,{
        isFetching: true,
        isAuthenticated: false
      })
    case LOGIN_SUCCESS:
      return Object.assign({},state,{
        isFetching:false,
        isAuthenticated:true,
        username: action.username
      })
    case LOGIN_FAILURE:
      return Object.assign({},state,{
        isFetching: false,
        isAuthenticated: false,
        errorMessage: action.message
      })
    default:
      return state
  }
}


当我调度loginRequest时,Reducer将isFetching设置为true。但是该组件仍然不会更新,因为它仅从signUp Reducer中查看isFetching变量。

有没有一种方法可以让组件在两个减速器上查看isFetching变量?

最佳答案

有两种选择:



创建第三个(加载状态)减速器

创建另一个只具有isFetching的化极器,并侦听相同的事件。

export const loading = (state={}, action) => {
  switch(action.type) {
    case SIGNUP_REQUEST:
    case LOGIN_REQUEST:
      return Object.assign({},state,{
        isFetching: true
      })
    case SIGNUP_SUCCESS:
    case SIGNUP_FAILURE:
    case LOGIN_SUCCESS:
    case LOGIN_FAILURE:
      return Object.assign({},state,{
        isFetching: false
      })
    default:
      return state
  }
}


如果这两个请求有可能重叠,那么您可能应该具有独立的isLoading变量,而只需使用||



检查视图中的两个isFetching变量

{signup.isFetching || login.isFetching}


如果请求可能重叠,则很好。



将其全部放在一个减速器中

不太好..

关于javascript - React Container-来自任一reducer的访问状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37143450/

10-11 23:25