Recoil
20903 ワード
コイルを潰す~👊
Recoilライブラリの同期Featを作成します。Docs
Docsの内容を簡単に読めばいいです
互換性と非表示性のため、外部のグローバルステータス管理ライブラリと比較して、React自体に内蔵されているステータス管理機能を使用することが望ましい.
しかし、反応にはこのような問題がある.
逆互換性によりアプリケーション全体の状態を維持することは容易であり、アプリケーションが変更された場合でもこの状態を維持することができます.
主な概念
Atoms
atom 함수를 이용하여 생성
const fontSizeState = atom({
key: 'fontSizeState',
default: 14,
});
Atomsには、すべてのatomsのマッピングをデバッグ、持続性、および表示するための特定の高度なAPI用の一意のキーが必要です.2つのatomが同じ鍵を持つのはエラーであるため、鍵値はグローバルで一意である必要があります.React素子の状態のようなデフォルト値もあります.構成部品からatomを読み取り、書き込むにはuserRecoilstateというフックを使用します.ReactのuseStateと似ていますが、ステータスが構成部品間で共有できる違いがあります.
function FontButton() {
const [fontSize, setFontSize] = useRecoilState(fontSizeState);
return (
<button onClick={() => setFontSize((size) => size + 1)} style={{fontSize}}>
Click to Enlarge
</button>
);
}
ボタンをクリックすると、ボタンのフォントサイズが1増加し、fontSizeState atomを使用する他の構成部品のフォントサイズも変化します.selectors
セレクタは、入力として原子または他のセレクタを受け入れる純粋な関数です.
親のatomsまたはセレクタを更新すると、子のセレクタ関数も再実行されます.
コンポーネントは原子のようにセレクタを購読でき、セレクタが変更されると、コンポーネントも再レンダリングされます.
純粋な関数とは?-ある関数に同じパラメータを付与すると、常に同じ値の関数が返されます.
関数add(a,b){return a+b}//純関数
let c = 10;
function add(a,b,c) { return a + b + c }//!== じゅんかんすう
セレクタは、ステータスベースの派生データを計算するために使用されます.最小の状態セットのみが原子に格納され、他のすべての派生データはセレクタで指定した関数によって有効に計算され、無駄な状態の保持を防止します.
セレクタは、どの構成部品が自分を必要とするか、およびどの状態に依存するかを追跡し、この関数式の方法を非常に効果的にします.
素子の観点から,セレクタとatomsは同じインタフェースを有し,互いに置き換えることができる.
const fontSizeLabelState = selector({
key: 'fontSizeLabelState',
get: ({get}) => {
const fontSize = get(fontSizeState);
const unit = 'px';
return `${fontSize}${unit}`;
},
});
getプロパティは計算する関数です.渡されたgetパラメータからatomsや他のセレクタにアクセスできます.アクセスすると自動的に依存関係になり、原子とセレクタが更新されると、この関数も再実行されます.このfontSizeLabelStateの例では、セレクタはfontSizeStateというatomに依存する.
概念的にfontSizeLabelStateセレクタはfontSizeStateを入力として使用し、フォーマットされたフォントサイズラベル
動作は、返される純粋な関数を出力するのと同じです.
セレクタはuserRecoilValue()を使用して読み込むことができます.
userRecoilValue()は、パラメータとしてatomまたはセレクタを受信し、対応する値を返します.
fontSizeLabelStateセレクタは書き込み不可なのでuserRecoilstate()は使用しません.
function FontButton() {
const [fontSize, setFontSize] = useRecoilState(fontSizeState);
const fontSizeLabel = useRecoilValue(fontSizeLabelState);
return (
<>
<div>Current font size: ${fontSizeLabel}</div>
<button onClick={setFontSize(fontSize + 1)} style={{fontSize}}>
Click to Enlarge
</button>
</>
);
}
長文が終わり、インストールが始まります🤤
npx create-react-app my-app
yarn add recoil
インストール完了!
やるべきこと
受信値を入力してatomに保存し、セレクタを使用して保存した値に基づいてtextを使用します.lengthを表示するアプリケーションを作成します.
RecoilRoot
まず、recoil状態の構成部品を使用するには、親ツリーのある場所に表示されるRecoilRootが必要です.
ルート素子はRecoilRootを入れるのに最適な場所です.(App.js)
import logo from "./logo.svg";
import {
RecoilRoot,
atom,
selector,
useRecoilState,
useRecoilValue,
} from "recoil";
function App() {
return (
<RecoilRoot>
<CharacterCounter />
</RecoilRoot>
);
}
atom
const textState = atom({
key: 'textState', // unique ID (with respect to other atoms/selectors)
default: '', // default value (aka initial value)
});
Atomは状態の一部を表す.Atomsは任意の要素で読み書きできます.atom値を読み込む構成部品は、デフォルトでatomを購読します.
したがって、atomに変化が発生した場合、サブスクリプションのすべての構成部品が再レンダリングされます.
function CharacterCounter() {
return (
<div>
<TextInput />
<CharacterCount />
</div>
);
}
function TextInput() {
const [text, setText] = useRecoilState(textState); // atom 사용법 useRecoilState(key)
const onChange = (event) => {
setText(event.target.value);//setText로 지정한 atom의 값을 변경
};
return (
<div>
<input type="text" value={text} onChange={onChange} />
<br />
Echo: {text}
</div>
);
}
Selector
セレクタは、派生状態の一部を表します.派生した状態は状態の変化である.派生した状態は、任意の方法で所与の状態の純粋な関数を修正することによって伝達される状態の生成物と見なすことができる.
const charCountState = selector({
key: 'charCountState', // unique ID (with respect to other atoms/selectors)
get: ({get}) => {
const text = get(textState);// get(atomKey) 를 통해 값을 전달 받는다. atom의 값이 바뀌면 함수도 재실행
return text.length;
},
});
function CharacterCount() {
const count = useRecoilValue(charCountState);//useRecoilValue(selectorKey)
return <>Character Count: {count}</>;
}
Reference
この問題について(Recoil), 我々は、より多くの情報をここで見つけました https://velog.io/@gavri/Recoilテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol