-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Immer #194
Comments
イントロダクションイミュータブル(不変)なオブジェクトは効率的な変更検出を可能にする。 Immer によって以下のことが可能になる。
例const baseState = [
{
title: "Learn TypeScript",
done: true
},
{
title: "Try Immer",
done: false
}
] 上記のオブジェクトを元に、新しいオブジェクトを追加し、1つ目のオブジェクトのdoneをfalseにしたい。 import produce from "immer"
const nextState = produce(baseState, draft => {
draft[1].done = true
draft.push({title: "Tweet about it"})
})
|
インストール
CDN<script src="https://unpkg.com/immer"></script> サンプルimport { produce } from "immer";
const state = {
count: 0,
};
const newState = produce(state, draft => {
draft.count++;
});
console.log(newState);
|
produce関数produce(currentState, recipe: (draftState) => void): nextState 引数としてベースとなるステートと、ステートに対する変更を行う関数(immerではレシピと呼ぶ)を渡す。 レシピの中では代入など全ての操作が可能。 curried producerproduceの第一引数に関数(レシピ)を与えると、与えられた状態に対して常に同じ変更を与える関数(producerと呼ぶ)を生成できる。 produce(fn): producer const incrementer = produce((draft) => {
draft.counter++
});
const state = {
counter: 0,
};
const next = incrementer(state);
const nextnext = incrementer(next);
console.log(nextnext.counter); // 2 |
https://immerjs.github.io/immer/
Immerはドイツ語で「常に」。
イミュータブルな状態を便利に扱うためのライブラリ。
The text was updated successfully, but these errors were encountered: