useUpdateDoc(ドキュメントの更新)
Firestore 上のドキュメントのデータを更新するのに用います。
const [setFn, writing, called, error] = useUpdateDoc(path, fql, options);
Hooks の戻り値
setFn:
(...args: any[]) => voidデータを書き込むための関数です。
writing:
booleanデータを書き込んでいるかを表します。
called:
booleansetFnが呼び出されたかどうかを表します。error:
Errorデータ書き込みの際にエラーが発生した場合エラー内容が入力されます。初期値には
nullが代入されています。
Hooks の引数
path:
string更新対象のドキュメントの Firestore 上のパスです。
fql:
SetFqlドキュメントに書き込む内容を宣言的に示すオブジェクトです。
書き込む内容を Hooks を使う時点で確定させる
StaticSetFqlを用いたり、
書き込む内容をsetFnを呼び出す時点で確定させるDynamicSetFqlを用いることができます.
具体的な違いについてはuseSetDocの Exampleを参照してください。
optional options:
objectデータを取得する際のオプションです。
options の内容
optional merge:
boolean書き込み時に、ドキュメントの既存のフィールドを上書きするかを指定します。
optional mergeFields:
string[]書き込み時に、ドキュメントのどのフィールドを上書き対象にするかを指定します。
optional callback:
() => voidデータを書き込む際に実行される関数を指定することができます。
Example
const fql = {
fields: {
population: 40000000,
},
};
const [setTokyo, writing, called, error] = useSetDoc("/cities/Tokyo", fql);
更新前の Firestore が次のようになっているとします。
─── cities
└── Tokyo
├── country: "Japan"
├── name: "Tokyo"
└── population: 35676000
次を実行することでデータが更新されます。
setTokyo();
更新後の Firestore は次のようになります。
─── cities
└── Tokyo
├── country: "Japan"
├── name: "Tokyo"
└── population: 40000000
useSetDocの{merge:true}との違いについて
useSetDocとuseUpdateDocはそれぞれFirebase.firestoreのref.set()とref.update()に対応しています。
これらの大きな違いとしては、例えばドキュメント内に次のようなmapタイプのフィールドが存在していたとします。
─── cities
└── Tokyo
├── country: "Japan"
└── foo: { a: 0, b: 1 }
foo.aの内容を2に変更する場合、useSetDocでは次のように指定する必要があります。
const fql = {
fields: {
foo: { a: 2 },
},
};
const [setFn] = useSetDoc("cities/Tokyo", fql, { merge: true });
対して、useUpdateDocでは次のように指定することができます。
const fql = {
fields: {
"foo.a": 2,
},
};
const [setFn] = useUpdateDoc("cities/Tokyo", fql);
どちらの場合でも、setFn()の実行後は次のように書き換えられます。
─── cities
└── Tokyo
├── country: "Japan"
└── foo: { a: 2, b: 1 }