变更和更新缓存
打开src/components/Todo/TodoPrivateList.js
并导入 useMutation
React Hook,添加批量删除的变更。
import React, { Fragment, useState } from "react";- import { gql } from '@apollo/client';- import { useQuery } from '@apollo/client';+ import { useQuery, useMutation, gql } from "@apollo/client";import TodoItem from "./TodoItem";import TodoFilters from "./TodoFilters";const GET_MY_TODOS = gql`query getMyTodos {todos(where: { is_public: { _eq: false } }order_by: { created_at: desc }) {idtitlecreated_atis_completed}}`;+ // Remove all the todos that are completed+ const CLEAR_COMPLETED = gql`+ mutation clearCompleted {+ delete_todos(where: {is_completed: {_eq: true}, is_public: {_eq: false}}) {+ affected_rows+ }+ }+ `;
使用 useMutation
React Hook 并按下面的方式更新 clearCompleted
函数
const filterResults = filter => {setState({...state,filter: filter});};+ const [clearCompletedTodos] = useMutation(CLEAR_COMPLETED);clearCompleted() {+ clearCompletedTodos({+ optimisticResponse: true,+ update: (cache, {data}) => {+ const existingTodos = cache.readQuery({ query: GET_MY_TODOS });+ const newTodos = existingTodos.todos.filter(t => (!t.is_completed));+ cache.writeQuery({query:GET_MY_TODOS, data: {todos: newTodos}});+ }+ });}
这是待办事项应用程序的总结。
Did you find this page helpful?
Start with GraphQL on Hasura for Free
- Build apps and APIs 10x faster
- Built-in authorization and caching
- 8x more performant than hand-rolled APIs