เริ่มต้นอย่างรวดเร็ว
ตรวจสอบเนื้อหาหลักของหน้าการเริ่มต้นพร้อมตัวอย่างที่ทำงานจริงในครั้งเดียว
1. ติดตั้ง
hook สำหรับการแบ่ง/ลากใช้ React hook และ RxJS BehaviorSubjectดังนั้นแอปจึงต้องมี react, rxjsร่วมกันอยู่
bash
npm install @byeolnaerim/global-rx-state rxjs react3. หากต้องการคีย์รันไทม์ให้ใช้ createRxStateTuple
ในกรณีที่ชื่อถูกกำหนดในรันไทม์ เช่น workspace id ที่ได้รับจากเซิร์ฟเวอร์, พารามิเตอร์เส้นทาง, ชื่อแท็บที่ผู้ใช้คลิก สร้างคู่สถานะ Rxนี่เป็นเรื่องธรรมชาติ ตัวอย่างด้านล่างใช้ draft store ที่แตกต่างกันสำหรับแต่ละแท็บ
tsx
import { createRxStateTuple } from "@byeolnaerim/global-rx-state";
function RuntimeTabDraftSample() {
const [setActiveTab, , useActiveTab] = createRxStateTuple(
"profile",
"docsQuickActiveTab",
{ storage: "sessionstorage" },
);
const activeTab = useActiveTab();
const [setDraft, , useDraft] = createRxStateTuple(
{ content: "" },
`docsQuickDraft:${activeTab}`,
{ storage: "sessionstorage" },
);
const draft = useDraft();
return (
<Paper variant="outlined" sx={{ p: 2, borderRadius: 3 }}>
<Stack spacing={1.5}>
<Stack direction="row" spacing={1}>
{["profile", "settings", "billing"].map((tabName) => (
<Button
key={tabName}
variant={
activeTab === tabName ? "contained" : "outlined"
}
onClick={() => setActiveTab(tabName)}
>
{tabName}
</Button>
))}
</Stack>
<TextField
label={`${activeTab} draft`}
value={draft.content}
onChange={(event) =>
setDraft({ content: event.target.value })
}
fullWidth
/>
</Stack>
</Paper>
);
}4. รวบรวมกฎการเปลี่ยนแปลงด้วยตัวลดระดับ
ค่าธรรมดาเพียงพอด้วย setter แต่หากสถานะเปลี่ยนแปลงตามหลายการกระทำหรือค่าต่างๆ ขึ้นอยู่กัน สร้างตัวลดระดับ Rxการรวบรวมกฎการเปลี่ยนแปลงไว้ในที่เดียวจะปลอดภัยกว่า
tsx
type TodoAction =
| { type: "add"; text: string }
| { type: "reset" };
function todoReducer(state: TodoState, action: TodoAction): TodoState {
switch (action.type) {
case "add":
return { items: [...state.items, action.text] };
case "reset":
return { items: [] };
default:
return state;
}
}
const { dispatchTodo, useTodo } = createRxReducer(
{ items: [] },
todoReducer,
"todo",
);