我在我的本机反应应用程序中使用 redux。为了更新一些配置文件数据,我在我的一个组件中调度了一个动作 updateProfile(data)
在我的组件中
values = { // some Js object values }
updateProfile(values)
在行动创造者
export const updateProfile = (details) =>(dispatch) => {
dispatch(profileLoading())
axios.post(SERVERURL,details) //updating the details to the server
.then((result)=>{
dispatch(addProfile(result.data[0])) //updating the returned details to redux state
})
.catch((err)=>{
dispatch(profileFailed(err.response))
})
})
}
export const profileLoading = () => ({
type: ActionTypes.PROFILE_LOADING,
})
export const addProfile = (profile) => ({
type: ActionTypes.ADD_PROFILE,
payload: profile
})
export const profileFailed = (err) => ({
type: ActionTypes.PROFILE_FAILED,
payload: err
})
配置文件.js
import * as ActionTypes from './ActionTypes'
export const profiles = (state = {
isLoading:true,
errMess:null,
profiles:{ }
},action) =>{
switch(action.type){
case ActionTypes.ADD_PROFILE:
return {...state, isLoading:false, errMess:null, profiles: action.payload}
case ActionTypes.PROFILE_LOADING:
return {...state, isLoading:true,errMess:null}
case ActionTypes.PROFILE_FAILED:
return {...state, isLoading:false,errMess:action.payload, profiles: {}}
case ActionTypes.DELETE_PROFILE:
return {...state,isLoading:false,errMess:null,profiles:{}}
default:
return state
}
}
在这一行updateProfile(values)之后,目前正在使用如下所示的 setTimeout 来了解更新的结果
updateProfile(values)
setTimeout(()=>{
if(profiles.errMess==null){
setCondition('completed')
nav.navigate('some Screen')
}
else{
setCondition('error')
}
},3000)
因为我需要导航到其他屏幕,所以我不能使用 SetTimeOut,因为它会不断地产生延迟,即使更新很快完成,如果更新时间超过 3 秒,它仍然会引起头痛。我想要的是,仅当数据更新到服务器时导航到“某个屏幕”(如承诺)是的,我可以更新 redux 状态中的状态值,但我需要在组件级别实现它。我是 redux 的新手。请有人帮助我。
子衿沉夜
相关分类