بدء سريع

تحقق من المحتوى الأساسي لصفحة البدء مع مثال يعمل.


1. التثبيت

@byeolnaerim/global-rx-stateيستخدم React hook و RxJS. BehaviorSubjectلذا يجب أن تكون التطبيق مع react, rxjsمعاً.

bash
npm install @byeolnaerim/global-rx-state rxjs react

2. مشاركة المتجر بنفس الاسم

وضع الأسماء مصمم ليكون سهل الاستدعاء داخل المكون. عند استدعاء بنفس الاسم إنشاء حالة Rxسيعيد نفس المتجر العالمي. إذا كانت القيمة التالية تعتمد على القيمة السابقة، setValue((prev) => next) استخدم مجموعة من النوع الوظيفي.

tsx
import { createRxState } from "@byeolnaerim/global-rx-state";

function CounterButtons() {
  const { setCountInner, useCountInner } = createRxState(
    0,
    "countInner",
    { storage: "localstorage" },
  );

  const countInner = useCountInner();

  return (
    <button onClick={() => setCountInner((prev) => prev + 1)}>
      {countInner}
    </button>
  );
}

function CounterDisplay() {
  const { useCountInner } = createRxState(0, "countInner", { storage: "localstorage" });
  const countInner = useCountInner();

  return <span>현재 count: {countInner}</span>;
}

3. استخدم createRxStateTuple إذا كنت بحاجة إلى مفتاح وقت التشغيل.

عندما يتم تحديد الاسم في وقت التشغيل مثل معرف مساحة العمل المستلم من الخادم، معلمة المسار، أو اسم التبويب الذي نقر عليه المستخدم، إنشاء مجموعة حالة Rxهذا طبيعي. المثال أدناه يستخدم مخزن مسودة مختلف لكل تبويب.

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. اجمع القواعد المتغيرة في المخفض.

القيم البسيطة كافية مع مجموعة، ولكن إذا كانت الحالة تتغير بناءً على عدة إجراءات أو القيم تعتمد على بعضها، إنشاء مخفض 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",
);
© 2026 بيولناريم. جميع الحقوق محفوظة.مقدمةسياسة معالجة المعلومات الشخصية