我无法解决这个问题。基本上,我有一个从状态中提取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/