164. Immerのproduce()を実装してください
シェアしよう
少し工夫が必要 - accepted / - tried
Immutability helperを実装するでは、 いろんなimmutability helpersの実装が求められる。
けれども使い方を覚えないといけない。 Immer では違うアプローチをとってもっと使いやすくすることができる。
例えば、下記のstateがあるとする。
const state = [
{
name: 'BFE',
},
{
name: '.',
}
]
produce()
を使えば思うようにstateを変更することができる。
const newState = produce(state, draft => {
draft.push({name: 'dev'})
draft[0].name = 'bigfrontend'
draft[1].name = '.' // 同じ値をsetする
})
変わらないパーツはそのまま。
expect(newState).not.toBe(state);
expect(newState).toEqual(
[
{
name: 'bigfrontend',
},
{
name: '.',
},
{
name: 'dev'
}
]
);
expect(newState[0]).not.toBe(state[0])
expect(newState[1]).toBe(state[1])
expect(newState[2]).not.toBe(state[2])
produce()を実装してください.
- Immerを完全に実装することではない、test caseは完全ではない
- plain object と arrayの基本ケースをカバーすれば良い、Map/SetやAuto freezingなどは気にしなくて良い。
- 変わらないパーツはそのままでcloneしないでください。