211008コードキャンプ26日目
apollo-cache-stateの使用
📔 結果
index.tsx
...
import { gql, useMutation, useQuery } from "@apollo/client";
// query 문 생략
...
export default function ApolloCacheStatePage() {
const { data } = useQuery(FETCH_BOARDS);
const [deleteBoard] = useMutation(DELETE_BOARD);
const [createBoard] = useMutation(CREATE_BOARD);
クラス関数では、最近の関数にasyncを付けるべきです。 updateは、上記のリクエストが完了した後に実行される機能です。 既存のfetchBoards 10個から現在削除されているID 9個を作成します。
このようにして作成された9つの新しいfetchBoardを返し、それを上書きします。
const onClickDelete = (boardId) => async () => {
await deleteBoard({
variables: {
boardId: boardId,
},
update(cache, { data }) {
const deletedId = data.deleteBoard;
cache.modify({
fields: {
fetchBoards: (prev, { readField }) => {
const newFetchBoards = prev.filter(
(el) => readField("_id", el) !== deletedId
);
return [...newFetchBoards];
},
},
});
},
});
};登记关数也是这样的!
追加された11個のcreateBoard成果物と上位10個の結果を返します。
data.createBoardを後ろに置くと、後ろに新しいものがあります。
const onClickCreate = () => {
createBoard({
variables: {
createBoardInput: {
writer:「テスト」
password: "123",
title:「テストタイトル」
contents:「テスト内容」
},
},
update(cache, { data }) {
cache.modify({
fields: {
fetchBoards: (prev) => {
return [data.createBoard, ...prev];
},
},
});
},
});
};
return (
<>
{data?.fetchBoards.map((el) => (
<div key={el._id}>
<span>{el.writer}</span>
<span>{el.title}</span>
<span>{el.contents}</span>
<button on Click={onClickDelete(el.id)}>削除</button>
</div>
))}
<button onClick={onClickCreate}>登録</button>
</>
);
}
Reference
この問題について(211008コードキャンプ26日目), 我々は、より多くの情報をここで見つけました
https://velog.io/@as5427072/211008-코드캠프-26일차
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
...
import { gql, useMutation, useQuery } from "@apollo/client";
// query 문 생략
...
export default function ApolloCacheStatePage() {
const { data } = useQuery(FETCH_BOARDS);
const [deleteBoard] = useMutation(DELETE_BOARD);
const [createBoard] = useMutation(CREATE_BOARD);
updateは、上記のリクエストが完了した後に実行される機能です。 既存のfetchBoards 10個から現在削除されているID 9個を作成します。
このようにして作成された9つの新しいfetchBoardを返し、それを上書きします。
const onClickDelete = (boardId) => async () => {
await deleteBoard({
variables: {
boardId: boardId,
},
update(cache, { data }) {
const deletedId = data.deleteBoard;
cache.modify({
fields: {
fetchBoards: (prev, { readField }) => {
const newFetchBoards = prev.filter(
(el) => readField("_id", el) !== deletedId
);
return [...newFetchBoards];
},
},
});
},
});
};登记关数也是这样的!
追加された11個のcreateBoard成果物と上位10個の結果を返します。
data.createBoardを後ろに置くと、後ろに新しいものがあります。
const onClickCreate = () => {
createBoard({
variables: {
createBoardInput: {
writer:「テスト」
password: "123",
title:「テストタイトル」
contents:「テスト内容」
},
},
update(cache, { data }) {
cache.modify({
fields: {
fetchBoards: (prev) => {
return [data.createBoard, ...prev];
},
},
});
},
});
};
return (
<>
{data?.fetchBoards.map((el) => (
<div key={el._id}>
<span>{el.writer}</span>
<span>{el.title}</span>
<span>{el.contents}</span>
<button on Click={onClickDelete(el.id)}>削除</button>
</div>
))}
<button onClick={onClickCreate}>登録</button>
</>
);
}
Reference
この問題について(211008コードキャンプ26日目), 我々は、より多くの情報をここで見つけました
https://velog.io/@as5427072/211008-코드캠프-26일차
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(211008コードキャンプ26日目), 我々は、より多くの情報をここで見つけました https://velog.io/@as5427072/211008-코드캠프-26일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol