restate / v1.0.0
सुरुवात
restate इन्स्टॉल करा, पहिले मूल्य कंपोनंटमध्ये सामायिक करा आणि तोच स्टोअर React बाहेर वापरा.
या पानावर
इन्स्टॉलेशनतुमचे पहिले सामायिक स्टेटमूल्य अद्ययावत करणेReact बाहेर वापरTypeScriptReact Nativeसर्व प्लॅटफॉर्मवर एकच घोषणाइन्स्टॉलेशन
restate React 16.8 आणि नवीन आवृत्त्यांसह चालते. TypeScript घोषणा सोबत येतात, आणि इतर रनटाइम अवलंबित्वे नाहीत.
npm install @kkwaenggwari/restateतुमचे पहिले सामायिक स्टेट
कंपोनंटच्या बाहेर एकदा स्टोअर तयार करा. restate परत करत असलेले मूल्य हुक आहे आणि set, get सारख्या मेथड असलेला ऑब्जेक्टही आहे.
Editor आणि CharacterCount यांच्यात props किंवा Provider नाही. एकात टाइप केल्यास दुसरा अद्ययावत होतो.
import { restate } from '@kkwaenggwari/restate';
export const useDraft = restate('');
export function Editor() {
const text = useDraft();
return <textarea value={text} onChange={(event) => useDraft.set(event.target.value)} />;
}
export function CharacterCount() {
const count = useDraft((text) => text.length);
return <span>{count} characters</span>;
}मूल्य अद्ययावत करणे
set नवीन मूल्य किंवा मागील मूल्याचे फंक्शन स्वीकारते. reset तुम्ही घोषित केलेल्या मूल्यावर परत जाते.
मूल्य अपरिवर्तनीय समजा: जुने बदलण्याऐवजी नवीन ऑब्जेक्ट किंवा ॲरे परत करा, म्हणजे सिलेक्टरना बदल दिसतो.
तुम्ही push ने cart.items मध्ये वस्तू जोडता आणि useCart.set(cart) कॉल करता. काहीही रेंडर का होत नाही?
स्टोअरला तोच ऑब्जेक्ट मिळतो, आणि Object.is ला बदल दिसत नाही. नवीन ऑब्जेक्ट परत करा, उदाहरणार्थ useCart.set(cart => ({ ...cart, items: [...cart.items, item] })).
useCount.set(10); // replace the value
useCount.set((count) => count + 1); // compute from the previous value
useCount.reset(); // back to the declared initial valueReact बाहेर वापर
तोच स्टोअर इव्हेंट हँडलर, सेवा आणि चाचण्यांमध्ये चालतो. get सध्याचे मूल्य वाचते; subscribe प्रत्येक बदलानंतर तुम्हाला कॉल करते आणि ऐकणे थांबवणारे फंक्शन परत करते.
import { useCart } from './stores/cart';
// Any module, event handler or test can use the same store.
const current = useCart.get();
useCart.set((cart) => ({ ...cart, items: [...cart.items, 'Pen'] }));
const stop = useCart.subscribe((cart, previous) => {
console.log(previous.items.length, '→', cart.items.length);
});
stop();TypeScript
स्टेटचा प्रकार एकदा द्या. सिलेक्टर, set आणि प्रत्येक मेथड त्यातून प्रकार मिळवतात.
import { restate } from '@kkwaenggwari/restate';
type Cart = { items: string[]; coupon: string };
export const useCart = restate<Cart>({ items: [], coupon: '' });
const count = useCart((cart) => cart.items.length); // number
useCart.set((cart) => ({ ...cart, coupon: 'SPRING' }));React Native
React Native वर मेमरी स्टोअरना आणखी काही लागत नाही. स्टेट सेव्ह करण्यासाठी react-native-mmkv इन्स्टॉल करा; React Native प्रवेश बिंदू ते आपोआप लोड करतो.
bare प्रकल्पांमध्ये इन्स्टॉलेशननंतर iOS साठी pod install चालवा. Expo मध्ये development build वापरा, कारण MMKV हे नेटिव्ह मॉड्यूल आहे.
npm install @kkwaenggwari/restate react-native-mmkv@4 react-native-nitro-modulesसर्व प्लॅटफॉर्मवर एकच घोषणा
सेव्ह होणारा स्टोअर ब्राउझरमध्ये IndexedDB आणि React Native वर MMKV वापरतो. घोषणा आणि तुमचे कंपोनंट तसेच राहतात.
import { persistedRestate } from '@kkwaenggwari/restate';
// IndexedDB on the web, MMKV on React Native. Same declaration.
export const useDraft = persistedRestate('', { key: 'draft' });