Reactjs Graphql调用Axios多次调用性能/重构

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

我可以删除数据并将数据添加到JSON文件中,但如果我一直按下按钮(切换add/delete),我会遇到网络故障。我假设我不能像这样提出多个请求

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服务器来构建应用程序。谢谢你的帮助!