reduxの公式サイト(Using Object Spread Operator)に書いてある話です。
結論
こうだったり
Object.assign
case SET_FUGA:
return Object.assign({}, state, {
hoge: { fuga: action.fuga }
})
こうだったのが
immutablejs
case SET_FUGA:
return state.setIn(['hoge', 'fuga'], action.fuga)
こうなります
ObjectSpread
case SET_FUGA:
return { ...state,
{ hoge: { fuga: action.fuga } }
}
必要なこと
babelのpresetをつかいます。
.babelrc
{
"plugins": ["transform-object-rest-spread"]
}
immutablejsのデメリット
- 他のライブラリとの共存
- コード全体で使うことになる
- object spreadと併用できない
- 小さい変更を行うreducerには適さない
- デバッグが難しい
同時に
これらの問題はすべて、慎重にコーディングすることで簡単に解決できます。」
とも語られています。
ちなみに
FlowtypeはObject Spreadをちゃんと解釈してくれます。安心。
なぜこれを書いたか
Immutablejsがデファクトスタンダードであるかのような話を耳にするのですが、公式サイトだと結構デメリットも語られてて、そのへんの温度感が気になったので書いてみたくなったのでした。
Object Spreadは特にreducerが小さく設計できてるときに簡単に書けるのが魅力な気がします。
本当に必要に迫られたときに必要なだけImmutablejsを使うのが良いように思います。
でもImmutablejsを導入するまえにicepickも検討されたい。。。こちらはリスク低いですよ。