【发布时间】:2020-10-22 01:20:18
【问题描述】:
我正在使用 React Apollo 和 GraphQL 构建一个小型 ToDo 列表应用程序。为了添加新的 ToDo 项目,我单击“添加”按钮,将我重定向到具有表单的不同 URL。在提交表单时,我执行mutation 并使用update 函数更新缓存。缓存已成功更新,但当我返回带有 ToDo 列表的主页时,该组件会触发一个 http 请求以从服务器获取 ToDo 列表。如何避免该额外请求并使ToDoList 组件从缓存中提取数据?
我的AddToDo 组件:
const AddToDo = () => {
const { inputValue, handleInputChange } = useFormInput();
const history = useHistory();
const [addToDo] = useMutation(ADD_TODO);
const onFormSubmit = (e) => {
e.preventDefault();
addToDo({
variables: { title: inputValue },
update: (cache, { data: { addToDo } }) => {
const data = cache.readQuery({ query: GET_TODO_LIST });
cache.writeQuery({
query: GET_TODO_LIST,
data: {
todos: [...data.todos, addTodo],
},
});
history.push("/");
},
});
};
return (
...
);
};
还有ToDoList组件
const ToDoList = () => {
const { data, loading, error } = useQuery(GET_TODO_LIST);
if (loading) return <div>Loading...</div>;
if (error || !loading) return <p>ERROR</p>;
return (
...
);
};
【问题讨论】:
标签: reactjs graphql react-apollo apollo-client