restate / v1.0.0

शुरुआत

restate इंस्टॉल करें, पहला मान कंपोनेंट के बीच साझा करें और वही स्टोर React के बाहर इस्तेमाल करें।

इस पेज परइंस्टॉल करेंआपका पहला साझा स्टेटमान अपडेट करनाReact के बाहर इस्तेमालTypeScriptReact Nativeहर प्लेटफ़ॉर्म पर एक घोषणा

इंस्टॉल करें

restate React 16.8 और नए संस्करणों के साथ काम करता है। TypeScript डिक्लेरेशन साथ आते हैं, और रनटाइम पर कोई दूसरी निर्भरता नहीं है।

Terminal
npm install @kkwaenggwari/restate

आपका पहला साझा स्टेट

स्टोर एक बार, कंपोनेंट के बाहर बनाएँ। restate जो मान लौटाता है, वह हुक भी है और set व get जैसे मेथड वाला ऑब्जेक्ट भी।

Editor और CharacterCount के बीच न props हैं, न Provider। एक में टाइप करने से दूसरा अपडेट होता है।

JavaScript / JSX
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] }))।

JavaScript / JSX
useCount.set(10); // replace the value
useCount.set((count) => count + 1); // compute from the previous value
useCount.reset(); // back to the declared initial value

React के बाहर इस्तेमाल

वही स्टोर इवेंट हैंडलर, सर्विस और टेस्ट में काम करता है। get मौजूदा मान पढ़ता है, और subscribe हर बदलाव के बाद आपको कॉल करता है और सुनना बंद करने वाला फ़ंक्शन लौटाता है।

JavaScript / JSX
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 और हर मेथड उसी से टाइप पाते हैं।

JavaScript / JSX
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 एक नेटिव मॉड्यूल है।

Terminal
npm install @kkwaenggwari/restate react-native-mmkv@4 react-native-nitro-modules

हर प्लेटफ़ॉर्म पर एक घोषणा

सहेजा गया स्टोर ब्राउज़र में IndexedDB और React Native में MMKV इस्तेमाल करता है। घोषणा और आपके कंपोनेंट वही रहते हैं।

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

// IndexedDB on the web, MMKV on React Native. Same declaration.
export const useDraft = persistedRestate('', { key: 'draft' });

दस्तावेज़ खोजें

सभी गाइड के शीर्षक, विवरण और सामग्री में खोजें।