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அழிக்கப்பட்ட ஸ்டோருக்குச் சந்தா செய்யப்பட்டது அல்லது சேமிப்பகத்தைப் பயன்படுத்தக் கேட்கப்பட்டது.

ஆவணங்களில் தேடு

எல்லா வழிகாட்டிகளின் தலைப்புகள், விளக்கங்கள், உள்ளடக்கத்தில் தேடுங்கள்.