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' });