ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

thumbnail

Labels:  JavaScript 投稿者:mori-dev

redux アプリで定期実行処理を書くには

です。redux アプリで redux-saga を使って定期実行処理を書いてみました。

要件

redux-saga で以下を実装する方法を検討しました。

  • 定期的にステート(本稿では reducer で分割したストア)の値をチェックして何かする
  • 定期的に API コールを行い、ストアを更新する
  • アプリが起動している間ずっとではなく、開始条件と終了条件をつけたい。
  • 終了条件は複数ある

答案

定期的にストアの値をチェックして何かするの実装例を書いてゆきます。redux-saga の公式ドキュメントの cancel の説明が参考になります。これをみつけられるかがキモかと思います。

ActionTypes

 

_TRIGGER、_STOP、_EXEC、_END の4種類を一組として、CHECK_ ではじめるルールとしました。

  • ActionTypes.CHECK_SAMPLE_TRIGGER
  • ActionTypes.CHECK_SAMPLE_STOP
  • ActionTypes.CHECK_SAMPLE_EXEC
  • ActionTypes.CHECK_SAMPLE_END

以下の2つは redux-saga で実行するアクションのアクションのタイプです。

  • ActionTypes.CHECK_SAMPLE_EXEC //=> これがビジネスロジックの開始合図
  • ActionTypes.CHECK_SAMPLE_END

以下の2つは redux-saga 以外で実行するアクションのタイプです。

  • ActionTypes.CHECK_SAMPLE_TRIGGER //=> saga への定期実行開始依頼
  • ActionTypes.CHECK_SAMPLE_STOP //=> saga への定期実行終了依頼

アクション

 

アクションの例です。

特徴はありません。

リデューサー

 

リデューサーは必要ないので作りません。

saga

 

単純な redux-saga の例です。ActionTypes.CHECK_SAMPLE_STOP と ActionTypes.LOGOUT_OK の2つのアクションを終了条件としました。

ミドルウェア

 

私たちのプロジェクトでは、ビジネスロジックはミドルウェアに書いています。以下は単純なミドルウェアの例です。
▼ src/middleware/periodic_inspections/sample.js

ミドルウェアでは次のようにステートを取り出せます。

const stateName = store.getState().stateName;

テスト

 

redux-saga の基本的なテストの例です。

「定期的に API コールを行いストアを更新する」処理も似たようなものです。

 

ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
ご興味がある方は、以下URLよりご応募ください。

PHPエンジニア
Rubyエンジニア
フロントエンドエンジニア
インフラエンジニア
新卒エンジニア
その他採用情報

関連記事

thumbnail
コールバックスタイルの外部ライブラリなどの関数を redux-saga で使うには

森です。本日の課題とその対処です。 課題 外部ライブラリの関数が、コールバックスタイルのため、redux-saga の自前実装部分との実装の統一感がない。たとえば、navigator.geolocation.getCurrentPosition で現在地を取得 …

nodejs
NodeJS, WebSockets and the real-time web

Today our team held first presentation of the series “lancers|conf”. The idea behind “lancers|conf” is to …

thumbnail
react.js/redux/webpack/flowtype なプロジェクトでの stylelint の導入手順

こんにちは。森です。 最近コードレビューで「CSS の `:` のあとにスペースがあったりなかったりします」と指摘され、つい悲しくなって stylelint を導入しました。react.js/redux/webpack/flowtype なプロジェクトです。こ …