Reactjs 在使用redux结构执行任务后,组件未在react native中更新

Reactjs 在使用redux结构执行任务后,组件未在react native中更新,reactjs,react-native,redux,react-redux,jsx,Reactjs,React Native,Redux,React Redux,Jsx,我正在使用react native构建一个应用程序,遵循redux的概念,现在我遇到了一个问题,我的组件在调度操作后并没有进行应有的更新 稍微解释一下情节,我有一个React类“QuestionScreen”,我想在页面打开后立即调用API,但在API工作时应该呈现加载程序,完成后,应该会出现问题。下面是我的代码 PS:我是新的react native和超级新的redux概念,所以有一点解释的帮助会很好 QuestionScreen.js 函数MapStateTops(状态){ 返回{ 会话:s

我正在使用react native构建一个应用程序,遵循redux的概念,现在我遇到了一个问题,我的组件在调度操作后并没有进行应有的更新

稍微解释一下情节,我有一个React类“QuestionScreen”,我想在页面打开后立即调用API,但在API工作时应该呈现加载程序,完成后,应该会出现问题。下面是我的代码

PS:我是新的react native和超级新的redux概念,所以有一点解释的帮助会很好

QuestionScreen.js

函数MapStateTops(状态){
返回{
会话:state.questionsReducer.session
}
}
功能图DispatchToprops(调度){
返回bindActionCreators(操作、分派);
}
类QuestionsScreen扩展组件{
静态导航选项=({navigation})=>({
标题:`${navigation.state.params.title}`,
头灯:,
HeaderIntColor:“#0b3484”,
});
建造师(道具){
超级(道具);
此.state={
params:this.props.navigation.state.params.passProps
};
this.fetchSessionQuestions=this.fetchSessionQuestions.bind(this);
}
fetchSessionQuestions(){
这个。道具。抓取练习题({
URL:BASE_URL+'/api/dashboard/get_chapter_question/',
章节:this.state.params.chapter_name
});
}
componentDidMount(){
这是fetchSessionQuestions();
}
render(){
const{navigate}=this.props.navigation;
if(this.props.session.isload){
返回(
//这里是加载器
);
}
否则{
const questions=this.props.session.questions;
返回(
//这里有一些关于逻辑的问题
);
}
}
}
导出默认连接(MapStateTrops、mapDispatchToProps)(问题筛选);
问题还原器.js

import*作为“../actions/actionTypes”中的类型;
常量初始状态={
会议:{
孤岛加载:是的,
当前问题:0,
问题:[],
分数:0,
所用时间:0,
尝试:0
}
};
const newState=JSON.parse(JSON.stringify(initialState));
导出默认函数问题还原器(状态=初始状态,操作){
开关(动作类型){
案例类型。下一个问题:
newState.session.currentQuestion=newState.session.currentQuestion+action.payload;
返回新闻状态;
案例类型。获取\实践\问题:
获取(action.payload.URL{
方法:“POST”,
正文:JSON.stringify({
用户名:'学生',
密码:“pass1234”,
第章:行动
})
}).
然后((response)=>response.json()。
然后((responseJson)=>{
newState.session.questions=responseJson;
newState.session.isLoading=false;
});
console.log(newState);
返回新闻状态;
违约:
返回状态;
}
}
现在我遇到的问题是,我的问题屏幕中的props.session保持不变,因此加载程序继续旋转,即使在发送该操作之后,我现在该怎么办


是的,还有一件事我使用logger和thunk中间件检查了控制台中的状态,那里打印的状态与预期一样,显示了正确的值

您应该使用中间件作为Redux thunk来实现异步操作。另外,您不应该使用fetchinreducer,应该在请求开始、请求成功和请求错误时调度3个事件。大概是这样的:

export const callApi=((fetchUrl)=>(dispatch)=>{
分派(requestBegin());
让body=(method=='GET')?未定义:JSON.stringify(data);
返回fetch(fetchUrl{
方法,,
身体,
})
.然后(检查状态)
.then(解析JSON)
.then(功能(数据){
调度(请求成功)(数据);
}).catch(函数(错误){
调度(请求错误(数据));
})  
});

此外,您还可以阅读有关异步操作的内容

谢谢我花了两天时间才想到这个解决方案,谢谢它成功了:)