restate / v1.0.0
तुम्ही ठरवाल तेव्हा सेव्ह करा
स्टोअर IndexedDB किंवा MMKV मध्ये ठेवा, सुरुवातीला एकदा लोड करा, स्पष्टपणे किंवा आपोआप सेव्ह करा आणि सेव्ह न झालेले बदल दाखवा.
या पानावर
सेव्ह होणारा स्टोअर घोषित करणेसुरुवातीला एकदा वाट पाहासेव्ह, रद्द आणि रीसेटसेव्ह न झालेले बदल आणि प्रगती दाखवणेवापरून पाहास्वयं-सेव्हपान बंद होण्यापूर्वीस्टोरेज त्रुटी हाताळणेसेव्ह होणारा स्टोअर घोषित करणे
restate ला persistedRestate ने बदला आणि key द्या. कंपोनंट तोच हुक आणि तोच set वापरत राहतात.
तयार झाल्यावर सेव्ह केलेले मूल्य आपोआप पुनर्संचयित होते. संपादनाने मेमरी बदलते; तुम्ही सेव्ह करेपर्यंत किंवा autoSave चालू करेपर्यंत काहीही लिहिले जात नाही.
import { persistedRestate } from '@kkwaenggwari/restate';
export const useDraft = persistedRestate('', {
key: 'article-draft',
validate: (value) => typeof value === 'string',
});सुरुवातीला एकदा वाट पाहा
क्लायंट प्रवेश बिंदूवर ॲप आणि त्याचे स्टोअर import करा आणि रेंडर करण्यापूर्वी restateManager.ready ची वाट पाहा. त्यानंतर कंपोनंट सेव्ह केलेली मूल्ये थेट वाचू शकतात.
अनुपलब्ध स्टोरेज — सर्व्हर रेंडरिंगमध्ये किंवा ते अवरोधित करणाऱ्या ब्राउझरमध्ये — त्रुटी नाही: असे स्टोअर मेमरीमध्ये चालतात. नोंदी वाचता, रूपांतरित किंवा प्रमाणित करता येत नाहीत तेव्हाच ready नाकारले जाते.
import { createRoot } from 'react-dom/client';
import { restateManager } from '@kkwaenggwari/restate';
import App from './App';
async function start() {
const root = createRoot(document.getElementById('root'));
try {
await restateManager.ready;
root.render(<App />);
} catch (error) {
root.render(<p>Could not load saved data.</p>);
console.error(error);
}
}
start();सेव्ह, रद्द आणि रीसेट
save सध्याचे मूल्य लिहिते, restore सेव्ह केलेल्या मूल्यावर परत जाते, आणि resetAll मेमरी व स्टोरेज साफ करते. प्रत्येक Promise परत करते.
await useDraft.save(); // write the current value
await useDraft.restore(); // return to the saved value
await useDraft.resetAndClearStorage(); // initial value in memory, record removedसेव्ह न झालेले बदल आणि प्रगती दाखवणे
सेव्ह स्थिती बदलल्यावर useStatus पुन्हा रेंडर होतो. शेवटच्या लोड, सेव्ह किंवा पुनर्संचयित मूल्यापासून मेमरी वेगळी असेपर्यंत dirty true असते. operation सध्याच्या स्टोरेज क्रियेचे नाव सांगते.
एखादे फील्ड बदलल्यावरच पुन्हा रेंडर होण्यासाठी selector द्या.
function SaveButton() {
const { dirty, operation, error } = useDraft.useStatus();
const saving = operation === 'save';
return (
<>
<button disabled={!dirty || saving} onClick={() => useDraft.save().catch(() => {})}>
{saving ? 'Saving…' : 'Save'}
</button>
{error != null && <p>Could not save your draft.</p>}
</>
);
}वापरून पाहा
टाइप करा, स्टोरेज विलंब वाढवा आणि सेव्ह करा. पुनर्संचयित मसुदा पाहण्यासाठी उदाहरण पुन्हा चालवा.
उदाहरण तयार होत आहे…
स्वयं-सेव्ह
नेहमी सेव्ह व्हायला हव्यात अशा सेटिंग्ज आणि मसुद्यांसाठी एकदा चालू करा. autoSave: true प्रत्येक बदलानंतर सेव्ह करते; { delayMs } बदल थांबेपर्यंत वाट पाहते.
लागोपाठचे बदल एकाच लेखनात होतात, आणि सेव्ह केलेल्या मूल्यावर परत गेल्यास काहीही लिहिले जात नाही. त्रुटी status().error मध्ये दिसतात. कंपोनंटचा scope अनमाउंटवेळी प्रलंबित बदल लिहितो.
export const useTheme = persistedRestate('light', { key: 'theme', autoSave: true });
export const useDraft = persistedRestate('', {
key: 'article-draft',
autoSave: { delayMs: 500 },
});पान बंद होण्यापूर्वी
तीच स्थिती React बाहेर वाचा. बाहेर पडण्यापूर्वी सेव्ह न झालेल्या बदलांबद्दल सावध करा, किंवा पान लपल्यावर सर्व सेव्ह करा.
window.addEventListener('beforeunload', (event) => {
if (useDraft.status().dirty) event.preventDefault();
});
window.addEventListener('pagehide', () => {
restateManager.saveAll();
});स्टोरेज त्रुटी हाताळणे
स्टोरेज त्रुटी क्रियेचे Promise नाकारतात. प्रत्येक restate त्रुटीला code असतो, आणि सेव्ह होणाऱ्या स्टोअरसाठी नोंदीची key देखील.
try {
await useDraft.save();
} catch (error) {
if (error.code === 'STORAGE_UNAVAILABLE') showNotice('Saving is off in this browser.');
else if (error.code === 'STORAGE_VALUE_TOO_LARGE') showNotice('This draft is too large.');
else showNotice(`Could not save "${error.key ?? 'draft'}".`);
}