restate / v1.0.0

रचनेतच विश्वासार्ह

स्टोरेज मंद, अयशस्वी किंवा अनुपस्थित असताना restate कशाची हमी देते, आणि ते कळवत असलेल्या त्रुटी कशा वाचायच्या.

या पानावरहमीक्रमबद्ध सेव्हवापरून पाहालोड अयशस्वी झाल्यावरसेव्ह करून बंद करास्टोरेज अनुपलब्धसेव्ह केलेला डेटा प्रमाणित आणि रूपांतरित करणेतुमचे स्वतःचे स्टोरेजमर्यादा आणि कालमर्यादात्रुटी कोड

हमी

हे वर्तन 1.0 कराराचा भाग आहे आणि पॅकेजच्या चाचण्या ते समाविष्ट करतात.

परिस्थितीrestate काय करते
लागोपाठ अनेक सेव्हप्रत्येक स्टोअरसाठी क्रमाने चालवते; रांगेतील सेव्ह सर्वात नवे मूल्य लिहिते.
एक नोंद लोड झाली नाहीautoSave आणि एकत्रित सेव्ह LOAD_FAILED सह ती वगळतात; फक्त स्पष्ट save() ती बदलते.
सेव्ह करताना कंपोनंट अनमाउंट होतोमागितलेले सेव्ह पूर्ण होते; नष्ट झालेल्या स्टोअरवरील नंतरचे लेखन दुर्लक्षित केले जाते.
स्टोरेज अनुपलब्धस्टोअर मेमरीमध्ये चालतो, status().available false होते, आणि सेव्ह नाकारले जातात.
अडॅप्टर अडकतोoperationTimeoutMs नंतर क्रियेची वेळ संपते; पुढील काम अडॅप्टर पूर्ण होईपर्यंत थांबते.
खूप जास्त प्रलंबित कामनवीन क्रिया अमर्याद वाढण्याऐवजी QUEUE_FULL ने नाकारल्या जातात.

क्रमबद्ध सेव्ह

एका स्टोअरच्या क्रिया कधीही एकमेकांवर येत नाहीत. दुसरी वाट पाहत असताना सुरू होणारे सेव्ह सर्वात नवे मूल्य घेते, त्यामुळे प्रत्येक बदलावर सेव्ह केल्यास रांग न भरता शेवटची स्थिती लिहिली जाते.

JavaScript / JSX
useDraft.set('A');
const first = useDraft.save(); // writes "A"
useDraft.set('B');
const second = useDraft.save(); // waits in the queue
useDraft.set('C');
const third = useDraft.save(); // joins the waiting save

await Promise.all([first, second, third]); // ['A', 'C', 'C'] — two writes

वापरून पाहा

स्टोरेज मंद करा, लेखन अयशस्वी करा, किंवा स्टोरेज पूर्णपणे काढून टाका.

उदाहरण तयार होत आहे…

लोड अयशस्वी झाल्यावर

restateManager.ready BULK_OPERATION_FAILED ने नाकारले जाते आणि प्रत्येक अयशस्वी स्टोअरची यादी देते. ती नोंद लोड होईपर्यंत autoSave आणि saveAll तिला न बदलता LOAD_FAILED कळवतात.

बदल ठेवून सेव्ह करण्यासाठी initialize() ने पुन्हा प्रयत्न करा, ते टाकून देण्यासाठी restore() कॉल करा, किंवा नोंद जाणीवपूर्वक ओव्हरराइट करण्यासाठी save() वापरा.

JavaScript / JSX
try {
  await restateManager.ready;
} catch (error) {
  // BULK_OPERATION_FAILED: one entry per store that could not load.
  for (const { store, error: cause } of error.failures) {
    console.error(store.key, cause.code);
  }
}

सेव्ह करून बंद करा

अनमाउंटपूर्वी मागितलेले सेव्ह तरीही पूर्ण होते, त्यामुळे "सेव्ह करून बंद करा" हँडलरला वाट पाहावी लागत नाही.

JavaScript / JSX
function Document({ onClose }) {
  const useDraft = useRestateScope((scope) => persistedRestate('', { scope, key: 'draft' }));

  const saveAndClose = () => {
    useDraft.save(); // finishes even after this component unmounts
    onClose();
  };
  // …
}

स्टोरेज अनुपलब्ध

सर्व्हर रेंडरिंग आणि ब्राउझरने अवरोधित केलेले स्टोरेज या प्रारंभ त्रुटी नाहीत. बदल फक्त मेमरीमध्ये आहेत हे वापरकर्त्यांना सांगण्यासाठी available तपासा.

JavaScript / JSX
const { available } = useDraft.status();

if (!available) {
  // Server rendering or blocked browser storage: the store works in memory
  // and save() rejects with STORAGE_UNAVAILABLE.
  showNotice('Changes are kept until you close this tab.');
}

सेव्ह केलेला डेटा प्रमाणित आणि रूपांतरित करणे

version, migrate आणि validate जुन्या किंवा खराब नोंदींपासून तुमचे संरक्षण करतात. validate सेव्हपूर्वी आणि पुनर्संचयन किंवा रूपांतरानंतर चालते.

JavaScript / JSX
import { persistedRestate } from '@kkwaenggwari/restate';

const useSettings = persistedRestate(
  { theme: 'system' },
  {
    key: 'settings',
    version: 2,
    migrate(value, from, to) {
      if (from === 1 && to === 2 && typeof value?.darkMode === 'boolean') {
        return { theme: value.darkMode ? 'dark' : 'light' };
      }
      throw new Error('Unsupported stored version');
    },
    validate: (value) => ['system', 'light', 'dark'].includes(value?.theme),
  },
);

तुमचे स्वतःचे स्टोरेज

getItem, setItem आणि removeItem असलेला कोणताही ऑब्जेक्ट चालतो. मेथड मूल्ये किंवा Promise परत करू शकतात; isAvailable ऐच्छिक आहे.

JavaScript / JSX
import { persistedRestate } from '@kkwaenggwari/restate';

const sessionStorageAdapter = {
  isAvailable: () => typeof sessionStorage !== 'undefined',
  getItem: (key) => sessionStorage.getItem(key),
  setItem: (key, value) => sessionStorage.setItem(key, value),
  removeItem: (key) => sessionStorage.removeItem(key),
};

export const useFilters = persistedRestate(
  { query: '' },
  {
    key: 'filters',
    storage: sessionStorageAdapter,
  },
);

मर्यादा आणि कालमर्यादा

एका क्रियेला किती वेळ लागू शकतो, किती वाट पाहू शकतात आणि एखादे मूल्य किती मोठे असू शकते ते सेट करा.

JavaScript / JSX
persistedRestate(value, {
  key: 'draft',
  operationTimeoutMs: 10_000, // default 30000
  maxPendingOperations: 64, // default 256
  maxStorageCharacters: 1_000_000,
});

त्रुटी कोड

restate तयार करत असलेल्या त्रुटींना name RestateError, code, आणि सेव्ह होणाऱ्या स्टोअरसाठी key असते. स्टोरेज अडॅप्टर आणि तुमचे callback त्यांच्या स्वतःच्या त्रुटींसह नाकारू शकतात.

कोडअर्थ
BULK_OPERATION_FAILEDrestateManager.ready किंवा saveAll सारख्या एकत्रित कॉलमध्ये अपयश आले; error.failures पाहा.
INDEXEDDB_ABORTEDएक IndexedDB व्यवहार रद्द झाला.
INDEXEDDB_BLOCKEDदुसऱ्या टॅबमधील कनेक्शनने डेटाबेस उघडणे अवरोधित केले.
INDEXEDDB_CONNECTION_CLOSINGविनंती सुरू झाली तेव्हा डेटाबेस कनेक्शन बंद होत होते.
INDEXEDDB_OPEN_FAILEDडेटाबेस उघडता आला नाही.
INDEXEDDB_REQUEST_FAILEDएक IndexedDB विनंती अयशस्वी झाली.
INDEXEDDB_STORE_MISSINGविद्यमान डेटाबेसमध्ये object store नाही.
INVALID_STORAGE_RECORDसेव्ह केलेली नोंद वैध restate नोंद नाही.
INVALID_STORED_VALUEमूल्य validate मधून उत्तीर्ण झाले नाही.
LIFECYCLE_LIMITएक updater वारंवार सुरू आणि बंद झाला.
LOAD_FAILEDनोंद लोड करता आली नाही, त्यामुळे स्वयं किंवा एकत्रित सेव्हने ती बदलली नाही.
MMKV_UNAVAILABLEreact-native-mmkv लोड होऊ शकले नाही.
MULTIPLE_ERRORSएकाच क्रियेत अनेक callback अयशस्वी झाले; error.errors पाहा.
NOTIFICATION_LIMITनिरीक्षक एका चक्रात सतत बदल नियोजित करत राहिले.
OBSERVER_ERRORएका listener किंवा lifecycle callback ने त्रुटी फेकली.
OPERATION_ABORTEDएक स्टोरेज क्रिया रद्द केली गेली.
QUEUE_FULLmaxPendingOperations परवानगी देते त्यापेक्षा जास्त क्रिया वाट पाहत होत्या.
REENTRANT_SETTERएका स्टेट updater ने चालू असतानाच त्याच स्टोअरमध्ये बदल करण्याचा प्रयत्न केला.
SCOPE_DESTROYEDस्टोअर तयार करण्यासाठी नष्ट झालेला scope वापरला गेला.
SEQUENCE_EXHAUSTEDअंतर्गत क्रमाचे ओळखकर्ते संपले.
STORAGE_BLOCKEDकालमर्यादा किंवा रद्दीकरणानंतरही मागील अडॅप्टर कॉल पूर्ण झाला नाही.
STORAGE_TIMEOUTएका क्रियेला operationTimeoutMs पेक्षा जास्त वेळ लागला.
STORAGE_UNAVAILABLEयेथे स्टोरेज वापरता येत नाही; स्टोअर मेमरीमध्ये चालू राहतो.
STORAGE_VALUE_TOO_LARGEएन्कोड केलेले मूल्य maxStorageCharacters पेक्षा मोठे आहे.
STORAGE_VERSION_MISMATCHनोंदीची आवृत्ती वेगळी आहे आणि कोणत्याही migrate फंक्शनने ती हाताळली नाही.
STORE_DESTROYEDनष्ट झालेल्या स्टोअरला सबस्क्राइब केले किंवा स्टोरेज वापरण्यास सांगितले.

दस्तऐवजांमध्ये शोधा

सर्व मार्गदर्शकांची शीर्षके, वर्णने आणि मजकुरात शोधा.