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

ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕಿ

ಎಲ್ಲ ಮಾರ್ಗದರ್ಶಿಗಳ ಶೀರ್ಷಿಕೆ, ವಿವರಣೆ ಮತ್ತು ವಿಷಯದಲ್ಲಿ ಹುಡುಕಿ.