loading...
gumi TECH Blog

React: React Redux 6.0がリリース

gumitech profile image gumi TECH ・1 min read

React Reduxのv6.0.0が2018年12月5日にリリースされました。本稿はリリース情報にもとづいてその内容をご紹介します。

React Redux 6.0は、React 16.4から新たに備わったContext APIをサポートするはじめてのリリースです。したがって、React 16.4以降が必要です。v6の詳しい変更点や、React Reduxのこれまでの実装の変遷については「Idiomatic Redux: The History and Implementation of React-Redux」をご参照ください。

互換性を破る変更

React Redux 6.0に加えられた、後方互換性を破る変更はつぎのふたつです。

  • connectwithRefオプションは、forwardRefに置き替えられました。connect{forwardRef : true}が渡されると、接続したラッパーコンポーネントに参照を加えれば、そのコンポーネントのインスタンスが返されます。

  • 接続したコンポーネントにプロパティとしてstoreは渡せなくなりました。替わりに、カスタムのプロパティcontext={MyContext}が、<Provider><ConnectedComponent>のどちらも受け取れます。また、connectのオプションとして渡せるのは{context : MyContext}です。

変更された動作

React Redux 6.0で、これまでと動きが変わるのはつぎのふたつです。

  • 従来のコンテキストからStoreインスタンスを参照しようとするライブラリは動作しなくなります。Storeの状態は、<Context.Provider>に納められるようになったからです。これによって動きが変わるのは、たとえばconnected-react-routerreact-redux-subspaceです。(現在の実装では、Storeはそのコンテキストにも加えられます。けれど、コンテキストのStoreを参照する公開のAPIはありません。他のライブラリから参照できるようにしたものです。ただし、廃止される場合があります。)

  • componentWillMountでコンストラクタから送出するActionに関わる動きが変わります。これまで、親コンポーネントのコンストラクタからの送出により、子はマウントされていればただちに更新された状態が使えました。コンポーネントがそれぞれStoreから個別に読み取るためです。React Redux 6.0では、すべてのコンポーネントがコンテクストから同じ現行のStore状態の値を得ます。ですから、ツリーの一貫性が保たれ、分裂することはありません。これは全体としては改善です。けれど、これまでの動作に依存するアプリケーションに影響する場合があります。

その他の変更

Posted on Oct 2 '18 by:

gumitech profile

gumi TECH

@gumitech

gumi TECH は、株式会社gumiのエンジニアによる技術記事公開やDrinkupイベントなどの技術者交流を行うアカウントです。 gumi TECH Blog: http://dev.to/gumi / gumi TECH Drinkup: http://gumitech.connpass.com

gumi TECH Blog

株式会社gumiのエンジニアによる技術記事を公開しています。

Discussion

markdown guide