LoginSignup
7
1

More than 5 years have passed since last update.

reduxでimmutablejsの代わりにObject Spreadを使う

Last updated at Posted at 2017-05-17

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も検討されたい。。。こちらはリスク低いですよ。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1