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

दस्तऐवजांमध्ये शोधा

सर्व मार्गदर्शकांची शीर्षके, वर्णने आणि मजकुरात शोधा.