"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > وأوضح useSyncExternalStoreExports في كود مصدر الدولة.

وأوضح useSyncExternalStoreExports في كود مصدر الدولة.

تم النشر بتاريخ 2024-11-03
تصفح:558

في هذه المقالة، سننظر في كيفية استخدام Zustand لـ useSyncExternalStoreExports في [كود المصدر الخاص بها.]

useSyncExternalStoreExports in Zustand source code explained.

يتم استيراد useSyncExternalStoreExports من use-sync-external-store/shim/with-selector. use-sync-external-store عبارة عن شريط متوافق مع الإصدارات السابقة لـ React.useSyncExternalStore يعمل مع أي React يدعم الخطافات.

بقراءة الجملة أعلاه، قد تتساءل ما هو useSyncExternalStore.

استخدامSyncExternalStore

useSyncExternalStore هو خطاف تفاعلي يتيح لك الاشتراك في متجر خارجي.

const snapshot = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot?)

استخدم useSyncExternalStore لقراءة قيمة من متجر خارجي يمكن أن تكون:

  1. مكتبات إدارة الحالة التابعة لجهات خارجية والتي تحتفظ بحالة خارج React.

  2. واجهات برمجة تطبيقات المتصفح التي تكشف عن قيمة قابلة للتغيير وأحداث للاشتراك في تغييراتها.

مثال للاستخدام:

import { useSyncExternalStore } from 'react';
import { todosStore } from './todoStore.js';

function TodosApp() {
  const todos = useSyncExternalStore(todosStore.subscribe, todosStore.getSnapshot);
  // ...
}

تم اختيار المثال أعلاه من مستندات React.

استخدام SyncExternalStore في Zustand:

يستخدم Zustand useSyncExternalStore في src/traditional.ts.

import ReactExports from 'react'
// eslint-disable-next-line import/extensions
import useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector'
import { createStore } from './vanilla.ts'
import type {
  Mutate,
  StateCreator,
  StoreApi,
  StoreMutatorIdentifier,
} from './vanilla.ts'

const { useDebugValue } = ReactExports
const { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports

تم إلغاء هيكلة useSyncExternalStoreWithSelector من useSyncExternalStoreExports ويتم استخدامه في useStoreWithEqualityFn.

export function useStoreWithEqualityFn(
  api: ReadonlyStoreApi,
  selector: (state: TState) => StateSlice = identity as any,
  equalityFn?: (a: StateSlice, b: StateSlice) => boolean,
) {
  const slice = useSyncExternalStoreWithSelector(
    api.subscribe,
    api.getState,
    api.getInitialState,
    selector,
    equalityFn,
  )
  useDebugValue(slice)
  return slice
}

useSyncExternalStoreWithSelector لديه api.subscribe، api.getState، api.getInitialState، محدد وequalityFn.

معلومات عنا:

في Think Throo، نحن في مهمة لتعليم أفضل الممارسات المستوحاة من المشاريع مفتوحة المصدر.

ضاعف مهاراتك في البرمجة من خلال ممارسة المفاهيم المعمارية المتقدمة في Next.js/React، وتعلم أفضل الممارسات وبناء مشاريع على مستوى الإنتاج.

نحن مفتوح المصدر - https://github.com/thinkthroo/thinkthroo (لا تعطينا نجمة!)

قم بتعزيز مهارات فريقك من خلال دوراتنا المتقدمة المبنية على بنية قاعدة التعليمات البرمجية. تواصل معنا على [email protected] لمعرفة المزيد!

مراجع:

  1. https://github.com/pmndrs/zustand/blob/main/src/traditional.ts#L44

  2. https://www.npmjs.com/package/use-sync-external-store

  3. https://legacy.reactjs.org/docs/hooks-reference.html#usesyncexternalstore

  4. https://react.dev/reference/react/useSyncExternalStore

  5. https://github.com/reactwg/react-18/discussions/86



بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/thinkthroo/usesyncexternalstoreexports-in-zustand-source-code-explained-4n80?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3