Reactjs Graphql调用Axios多次调用性能/重构
我可以删除数据并将数据添加到JSON文件中,但如果我一直按下按钮(切换add/delete),我会遇到网络故障。我假设我不能像这样提出多个请求Reactjs Graphql调用Axios多次调用性能/重构,reactjs,react-native,graphql,refactoring,apollo,Reactjs,React Native,Graphql,Refactoring,Apollo,我可以删除数据并将数据添加到JSON文件中,但如果我一直按下按钮(切换add/delete),我会遇到网络故障。我假设我不能像这样提出多个请求 const handleSave = save => { if (save.toLowerCase() === 'save') { props .addSaved({ variables: { id: props.id, }, }) .then(re
const handleSave = save => {
if (save.toLowerCase() === 'save') {
props
.addSaved({
variables: {
id: props.id,
},
})
.then(res => {
setSaved('Unsave');
setSavedPropData(res.data.addSaved);
});
} else {
props
.deleteSaved({
variables: {
id: savedPropData.id,
},
})
.then(() => setSaved('Save'));
}
};
上面是我保存数据的句柄片段。所以每次按下它都会切换保存或不保存,然后它会将数据添加或删除到我的JSON中。我目前正在使用json服务器来测试应用程序
const savedMutate = gql`
mutation addSaved($id: String) {
addSaved(id: $id) {
id
}
}
`;
const deletedMutate = gql`
mutation deleteSaved($id: String) {
deleteSaved(id: $id) {
id
}
}
`;
export default _.flowRight(
graphql(savedMutate, {name: 'addSaved'}),
graphql(deletedMutate, {name: 'deleteSaved'}),
)(withNavigation(Card));
如果我将应用程序部署到生产环境中,是否有更好的方法来实现这一点?目前我在快速切换时遇到网络故障。我又试了一次,是不是因为我的应用程序每次都会刷新,并且在刷新时,我试图保存到数据库中,但它还没有完全安装?这仅仅发生在发展中吗
突变:
addSaved: {
type: SavedType,
args: {
id: {type: GraphQLString},
},
resolve(parentValue, {id}) {
return axios
.post(`http://localhost:3000/saved`, {id})
.then(res => res.data);
},
},
deleteSaved: {
type: SavedType,
args: {
id: {type: GraphQLString}
},
resolve(parentValue, {id}) {
return axios
.delete(`http://localhost:3000/saved/${id}`)
.then(res => res.data);
},
},
如果您正在使用nodemon运行服务器,并且您正在写入某个文件以响应请求,并且nodemon正在监视该文件,那么您的请求将始终触发服务器重新启动。由于第一个请求会重新启动服务器,因此之后紧接着的任何请求都将失败,因为您的服务器现在将在启动备份时关闭
你需要这样做。这样,对文件的任何更改都不会导致nodemon重新启动服务器。发生了什么错误?您将需要一个中间件来管理请求,并在需要时取消正在进行的请求。它更像是一个黄色警告,表示网络故障。我注意到,每次我提出请求时,我的nodemon都会重新启动,因此我正在开发的应用程序也会重新启动。我假设这就是原因,因为我在“刷新”应用程序的同时发出请求。在处理对数据库的同时请求时,最佳做法是什么?如果它正在生产中,这种情况还会发生吗?对于网络故障,请检查原因,如果有意义,请重试。对于对数据库的并发请求,通常有一个中间件来管理“请求”或事件队列。然后在更大范围内,您将需要为您的DBs进行分片和复制+一些容错机制(即拜占庭容错)。谢谢您的详细解释。在生产中,这不会发生,对吗@Joseph D解释说,我必须找到一个中间件来管理请求。如果您的设置在生产中是相同的,那么是的,它会发生。据推测,在生产环境中(甚至在开发环境中),您应该使用数据库,而不是直接写入文件,但在这种情况下,除非您出于某种原因让nodemon监视您的数据库目录,否则不会看到这种行为。啊,明白了!是的,我会在制作中给mongodb写。我只是使用JSON服务器来构建应用程序。谢谢你的帮助!