Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Apollo GraphQL为列表中的每个项目单独加载_Javascript_Reactjs_Graphql_Apollo_Mutation - Fatal编程技术网

Javascript Apollo GraphQL为列表中的每个项目单独加载

Javascript Apollo GraphQL为列表中的每个项目单独加载,javascript,reactjs,graphql,apollo,mutation,Javascript,Reactjs,Graphql,Apollo,Mutation,我有一份待办事项清单: 项目1 项目2 项目3 每个项目都有一个删除按钮,可以删除单个项目。 每个项目都有一个旋转器,可以从deletemotation 问题是: 在单个项目上按delete按钮后,微调器将为列表中的每个项目启用 我知道这里的问题,但不知道如何妥善解决。 我们可以为列表的每一项添加状态,以及打开微调器的逻辑 但我在这里寻找合适的解决方案。 也许有办法知道这个变异是用什么参数调用的,我将添加简单的代码 todos.map(({ id, title }) => ( &l

我有一份待办事项清单:

  • 项目1
  • 项目2
  • 项目3
每个项目都有一个删除按钮,可以删除单个项目。 每个项目都有一个旋转器,可以从
deletemotation

问题是: 在单个项目上按delete按钮后,微调器将为列表中的每个项目启用

我知道这里的问题,但不知道如何妥善解决。 我们可以为列表的每一项添加状态,以及打开微调器的逻辑

但我在这里寻找合适的解决方案。 也许有办法知道这个变异是用什么参数调用的,我将添加简单的代码

todos.map(({ id, title }) => (
  <div>
    <p>{title}</p>
    <button onClick={() => deleteMutation({ variables: { id } })}>
      {loading && id === deletedId ? <Spinner color="white" size="sm" /> : Delete}
    </button>
  </div>
))
todos.map({id,title})=>(
{title}

删除突变({variables:{id}}}> {loading&&id==deletedId?:Delete} ))
问题是使用/共享同一个变异实例,它的状态是-
加载
。下一个问题-同时删除两个项目可能是不可能的

可能的解决办法:

  • 如果每个项目都有自己的变异-将其作为一个组件(react中的廉价抽象),请在内部定义变异。当然有点多余,但适合更复杂的项目或个人行动

  • 。。。或者,在调用“变异”(在“onCompleted”中清除)之前,您必须使用一些标记(状态),例如
    itemBeingDeleted
    ,以阻止(禁用)其他项目删除按钮并在其中一个项目中显示加载


在单独的组件中移动项目逻辑可能是最好的解决方案!