قواعد وضع التوابل
وضع التوابل المجهول مخصص للتصدير على مستوى الوحدة، ويستخدم مساعد التوابل المسماة لمفتاح وقت التشغيل.
وضع التوابل المجهول مخصص فقط على مستوى الوحدة العليا.
createRxState(defaultValue)يتم إنشاء متجر جديد في كل مرة يتم فيها الاستدعاء. لذلك، يجب إنشاؤه مرة واحدة على مستوى الوحدة العليا وتصديره للاستخدام، وليس داخل دالة أو مكون. لا يتلقى هذا الوضع خيار التخزين، ولا يستخدم تتبع المكدس كمفتاح مخفي.
tsx
import { createRxState } from "@byeolnaerim/global-rx-state";
// Good: module top-level에서 한 번 생성합니다.
export const [setCount, getCount, useCount] = createRxState(0);
export function Counter() {
const count = useCount();
//Don't Do That: 컴포넌트나 함수 내부에서 anonymous tuple store를 만들지 마세요.
//매 렌더마다 새 store가 만들어질 수 있습니다.
//const [setCount, getCount, useCount] = createRxState(0);
return (
<button onClick={() => setCount((prev) => prev + 1)}>
{count}
</button>
);
}استخدم مساعد التوابل المسماة لمفتاح وقت التشغيل.
إنشاء مجموعة حالة Rxمناسب للحالات التي لا يتم فيها تحديد الاسم مسبقًا، مثل معرف مساحة العمل المستلم من الخادم، اسم التبويب الذي يختاره المستخدم، أو معلمات المسار. نفس مفتاح وقت التشغيل يعيد استخدام نفس المتجر، ومفتاح مختلف يستخدم متجرًا مختلفًا.
tsx
function RuntimeKeySample() {
const [setActiveTab, , useActiveTab] = createRxStateTuple(
"profile",
"docsRuntimeActiveTab",
{ storage: "sessionstorage" },
);
const activeTab = useActiveTab();
const [setDraft, , useDraft] = createRxStateTuple(
{ title: "", content: "" },
`docs-tab-draft:${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((tab) => (
<Button
key={tab}
variant={
activeTab === tab ? "contained" : "outlined"
}
onClick={() => setActiveTab(tab)}
>
{tab}
</Button>
))}
</Stack>
<TextField
label={`Draft for ${activeTab}`}
value={draft.content}
onChange={(event) =>
setDraft((prev) => ({
...prev,
content: event.target.value,
}))
}
fullWidth
/>
</Stack>
</Paper>
);
}