Storage
สามารถกู้คืนค่าของ named store ไปยัง browser storage ได้
ตัวเลือก storage
หากไม่ระบุตัวเลือก storage จะใช้ alias storage ที่มีอยู่สำหรับชื่อดังกล่าว และหากไม่มี alias ในหน่วยความจำเป็นค่าพื้นฐาน เมื่อจำเป็นต้องมี persistence ให้ระบุ storage.
ts
type RxStateStorage =
| "in-memory"
| "auto"
| "indexeddb"
| "IndexedDB"
| "websql"
| "WebSQL"
| "localstorage"
| "localStorage"
| "sessionstorage"
| "sessionStorage";สามารถใช้ชื่อ storage ตัวพิมพ์เล็กเป็นรูปแบบพื้นฐาน และชื่อย่อของ IndexedDB, WebSQL, localStorage, sessionStorage จะถูกทำให้เป็นมาตรฐานใน backend เดียวกัน.
ts
createRxState(0, "count");
// alias가 없으므로 in-memory
createRxState(0, "count", { storage: "auto" });
// 같은 name이어도 storage가 다르면 별도 store
createRxState(0, "theme", { storage: "localstorage" });
createRxState("", "draft", { storage: "sessionstorage" });
createRxState("", "draftAlias", { storage: "sessionStorage" });sessionstorage
sessionstorage และ sessionStorage ใช้ sessionStorage ของเบราว์เซอร์ ค่าจะถูกเก็บไว้ในขอบเขตของแท็บ/เซสชันปัจจุบัน และจะถูกสร้างใหม่เมื่อใช้ชื่อและตัวเลือก storage เดียวกัน.
tsx
const { setDraft, useDraft } = createRxState(
"",
"draft",
{ storage: "sessionStorage" },
);
function DraftInput() {
const draft = useDraft();
return (
<input
value={draft}
onChange={(event) => setDraft(event.target.value)}
/>
);
}ตัวอย่างการบันทึกการตั้งค่าผู้ใช้
ตัวอย่างด้านล่างนี้จะบันทึกการตั้งค่า UI ไปยัง localStorageหากสร้างใหม่ด้วยชื่อและตัวเลือก storage เดิมหลังจากรีเฟรช จะทำการ hydrate ค่าที่บันทึกไว้
tsx
const { setPrefs, usePrefs, prefsReady } = createRxState(
{ compact: false, showHints: true },
"prefs",
{ storage: "localstorage" },
);
function PreferencesPanel() {
const prefs = usePrefs();
return (
<button onClick={() => setPrefs((prev) => ({ ...prev, compact: !prev.compact }))}>
compact: {String(prefs.compact)}
</button>
);
}