受信したデータをローカルストレージに保存:Recoilの使用
15510 ワード
React와 Recoil을 이용하여 데이터를 로컬 스토리지에 저장해야하는 기능을 맡았다. 🤯🤯🤯 하지만! 하나씩 차근차근해보쟈!
まず、ローカルストレージについて説明します.ローカルストレージとは?
ローカルストレージはWebストレージオブジェクトです!Web上にデータを格納するスペース(?)このように理解するのはもっと簡単です.Webストレージには、主にローカルストレージとセッションストレージがあります.これら2つは、ブラウザ内で
키-값
対のストレージを使用することができる.ビスケットとは違う!🍪
Cookieは、有効期限のあるキー値リポジトリです.Cookieは最初からサーバとクライアントの間で継続的なデータ交換を行うために作成されたので、サーバに送信されています.これで問題だ!どうして.理由は以下の通り.Cookieの容量制限が4 kbに近い場合、要求のたびにデフォルトの4 kbのデータを使用する必要があります.つまり、サーバには4 kbの不要なデータが含まれている可能性があります.これはデータを浪費します!!
ローカルストレージとセッションストレージはサーバに自動的に送信されないため、より多くのデータを保持できます.
localStorage vs sessionStorage
提供されるプロセスと方法
// localStorage에 set
localStorage.setItem('test', 1);
// sessionStoage에서 get
sessionStorage.setItem('test');
// localStorage 모두 삭제
localStorage.clear();
RecoilRecoilでは、簡単に言えばFacebookが作成したステータス管理ライブラリです.Reactの内部状態のみを利用し,小Atom単位で管理する.次にSelectorという純粋な関数を使用します.その利点は,状態が変化するとatomを参照する素子のみがレンダリングされるため,容易に実現できることである.さらに,Recoilの状態は相互依存性を持つ可能性がある.データストリームに応じて、複数の状態の関連コンポーネントを有機的に管理できます!
もっと詳しい事項は公式文書で見ることができます
ローカルストレージ持続性
Atom Effectは、Atomステータスをブラウザのローカルストレージに保持するために使用することができる.
localStorage
は、async/await
またはPromise
を必要とせずに、データを同期して直接受信することができるこの言葉は正式な書類に書かれています!
公式ファイルのコードは、データのローカルストレージに格納する方法を示します.apiでデータをロードし、ユーザーがデータからコメントを追加すると、リストにデータを入れたり、変更したり、削除したりします.この場合、これらの変化した値をローカルストレージに格納できます.
実際、recoilの更新関数setter関数と次のコードを使用すると、変化した値を簡単に追加できます.
/utilities/localStorage.js
export const localStorageEffect =
(key) =>
({ setSelf, onSet }) => {
const savedValue = localStorage.getItem(key);
// console.log(savedValue);
if (savedValue != null) {
setSelf(JSON.parse(savedValue));
}
onSet((newValue) => {
localStorage.setItem(key, JSON.stringify(newValue));
});
};
上記のコードについては、まずuserStoredList
を作成して、小さなAtomユニットで管理されているrecoilを使用する必要があります.import { atom } from "recoil";
import { localStorageEffect } from "../constants/localStorage";
export const userStoredList = atom({
key: "userStoredList",
default: [],
effects: [localStorageEffect("user_list")],
この場合、atom()関数はキーと値で構成され、そのdefault配列には私たちが入れる値が含まれます.この場合の効果はreact의 useEffect()
に似ています.この文章は公式文書で詳しく知ることができる.effectを使うのは、値が変わるにつれてlocalstrageの値も変わるからだと推測できます!次に
/constants/localStorage.js
に戻り、以下に詳しく説明します.const localStorageEffect = key => ({setSelf, onSet}) => {
const savedValue = localStorage.getItem(key)
// localstorage의 user_list에 해당되는 값 -> savedValue가 null 이라면
if (savedValue != null) {
setSelf(JSON.parse(savedValue));
}
// setSelf() 함수 내에서는 Promise를 사용하거나 데이터를 비동기적으로 호출할 때 사용할 수 있다.
// setting함수가 변화되었을 때 즉, component에서
// setUserList(변화한 값);을 코드에 작성했을 때
// localStorage.setItem(key, JSON.stringify(newValue)); 가 실행되어
// localStorage에 키-값 형태로 들어가게 된다!
onSet((newValue, _, isReset) => {
// newValue 값의 길이가 0일 때
// userlist에 대한 값을 삭제해주면 된다.
const confirm = newValue.length === 0;
confirm ? localStorage.removeItem(key) : localStorage.setItem(key, JSON.stringify(newValue));
});
};
現在、ルータが/
に構成されているMain.js
では、localStorageの値を決定するコードが次のように記述されています.import { useRecoilState } from "recoil";
import { userStoredList } from "../atoms";
import { useEffect } from "react";
const Main = () => {
const [userList, setUserList] = useRecoilState(userStoredList);
useEffect(() => {
setUserList([
{
id: 100,
name: "Keane Sykes",
address: "Ap #765-5550 A, Av.",
phone: "010-1152-3825",
memo: "luctus, ipsum leo elementum sem, vitae aliquam eros turpis non",
},
]);
}, []);
return <div>MainPage Hello World!</div>;
};
export default Main;
なぜ削除するときはclear()ではなくlocalStorageなのか.removeItemを使用していますか?localStorage.clear();
を使用すると、ローカルストレージ内のコンテンツはすべて削除されます.しかし、機能がもう少し多ければ、低値を削除したいだけなので、より安全なlocalStorage.removeItem(key)
を使用しました.Reference
この問題について(受信したデータをローカルストレージに保存:Recoilの使用), 我々は、より多くの情報をここで見つけました https://velog.io/@ye-ji/받아온-데이터-로컬-스토리지에-저장하기-Recoil을-이용하여テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol