The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2022-02-17
ソフトウェア開発

ReduxからMobXへ

パヴェウ・チュミエレツキ

異なる技術に精通する必要がある日は、開発者の人生において実は毎日ある。今回のシナリオでは、Reactアプリの状態を管理するためにReduxを使う社内最後のプロジェクトに着地した。

なぜ我々はここにいるのか?

遅かれ早かれ、それを モブエックス 他のアプリと同じように。そのため、ざっと見てみることにした。それほど多くの コード についてはすでにご存知だと思う。 リダックス.始めよう。

Reduxとは何か?

で述べたとおりである。 redux.js.orgそれは「予測可能なコンテナの状態」である。 JSアプリ."2015年にダン・アブラモフとアンドリュー・クラークによって作られた。
それは次のように表現できる。 3原則:

  1. 単一真実点 - 状態は単一のストアに保持される、
  2. ステートは読み取り専用で、ステートを直接変更することはできない、
  3. 純粋関数は定義上、与えられたパラメーターに対して常に同じ結果を返し、常に実行でき、副作用がない。

MobXとは?

驚きはない、 モブエックス は状態管理のためのライブラリでもあるが、シンプルでスケーラブルにするために関数型リアクティブ・プログラミング(TFRP)を透過的に適用している。先のライブラリーと同様に、その哲学は3つのポイントで説明される:
1.シンプル - 最小限の、ボイラーフリーのコードで、操作に特別なツールは必要ありません、
2.最適なレンダリング - すべての計算が最適化され、手動でレンダリングする必要がありません、
3.アーキテクチャの自由度 - 実装は自由で、UIフレームワークなしで使用できる。

MobXとReduxの比較

学習

React は、初期設定にまつわる重大な定型文があることで知られている。これを無視することはできません。特に、多くのリデューサーとアクションを持つ大規模なアプリケーションを持っているとき、おそらくあなたはすでにアクションの型を文字列の定数として保持することを決めているでしょう!幸いなことに Reduxツールキット が人気を集めており、現在では次のように書くことが推奨されている。 リダックス ロジック。私に言わせれば、これは気に入っている!それでも、学ぶべきことはたくさんあるが、ツールキットを使ったシンプルな基本セットアップで十分だ。

を見ると MobXドキュメント偶然チョコレート工場に降り立った子供のようだった。例を見ていて、どうやったらうまくいくんだろうとずっと考えていたんだ。でも、リデューサー、アクション、ミドルウェア、その他もろもろを扱うことで、他のことに夢中になりやすくなるのかもしれない。とはいえ、もしあなたがOOPに精通しているのであれば、 モブエックス が自然に身につくだろう。最初のコーディングはかなり少なく、多くのことが舞台裏で行われるため、ほとんどの場合、気にする必要はない。

データ構造 - 状態の内部には何があるのか?

で リダックスプリミティブや配列、あるいは単なる JS オブジェクトをデータとして使用する。
また、配列にデータを格納する場合、パフォーマンス上の理由から正規化するのが一般的です。残念ながら、ReduxのToolkitにあるヘルパー関数(例. createEntityAdapter)は、まだ追加のコードを追加している。

で モブエックスプロパティ、オブジェクト全体、配列、マップ、セットを作成します。 観測可能である。 プリミティブの値については、ここでは触れません。 JS は不変であり、それゆえに異なる扱いを受ける必要がある。そのため、異なる扱いをする必要がある。 可観測 プリミティブを "ボックス "で包み、実際の値のゲッターとセッターは .get() そして .set(newValue) それぞれ observable.box(value)を参照。

インポート { observable, autorun } from "mobx"

const cityName = observable.box("Vienna") // observable("Vienna")と同じ。

オートラン(() => {)
    console.log(cityName.get())
})
// 印刷します:ウィーン

cityName.set("アムステルダム")
// Prints:アムステルダム'

データを正規化する必要はない。 モブエックス 可観測オブジェクトをクローンし、オブザーバブルにし、オブザーバブル・プロパティのいずれかを更新すれば、すべての変更がストアに反映されるようにする。

データの場所 - 店舗

私たちには、真実の唯一の情報源がある。 リダックス.状態を1つの場所に保持することで、データがアプリのあちこちで重複しないようにし、デバッグが容易になる。

モブエックス actually encourages having at least two separate stores, one for the UI state and one or more for the domain state. That separation allows us to reuse the domain in different applications.

というのも、私たちは次のような制約を受けないからだ。 JS プレーンなオブジェクトであれば、著者が提案するように、特定のドメイン・オブジェクトのために独自のクラスを作るのは自然なことのように思える。ここで モブックス オブジェクト指向のプログラミングが好きな人なら、その良さがわかるだろう。メソッドを持つことができ、何が観察可能かそうでないかをコントロールできる。さらに、複数のストアを組み合わせて参照を共有することもできる。

不変と変幻自在

リダックス の更新が必要である。 変異しない を返さなければならない。したがって、既存の配列に新しい項目を追加したい場合は、現在の配列にその項目を追加するだけでなく、新しいインスタンスを返す必要がある。

function todoReducer(state = [], アクション) { // ここでは新しい配列を作成し、スプレッド演算子を使って古い値を保持する。
    // ここでは、新しい配列を作成し、spread演算子を使って古い値を保持する。
    return [
      ...state、
     action.payload
    ]
}

そして モブエックス観測可能なプロパティを変更することができる。 トドス 配列に変異を与えている。元の配列を アド・トド

クラスObservableTodoStore { {.
  todos = [];

  コンストラクタ() {
    makeObservable(this, {
      todos: observable、
      addTodo: アクション、
    });
    autorun(() => console.log(this.todos.length)))。
  }


  addTodo(task) {
    //ここでは、新しい項目を既存の配列にプッシュしているだけです!
    this.todos.push({
      task: task、
      completed: false、
    });
  }

}

observableTodoStore = new ObservableTodoStore();
observableTodoStore.addTodo("Some tough thing to do");

さらに、直接 トド リストを見てみよう。 オートラン のobservable配列の変化に気づく)。 トドス).

observableTodoStore.todos.push("Some other tough task");

// さらに興味深いのは、特定のToDoプロパティを更新するときだけです。
// observableTodoStore.todos[1]を更新するときだけ、MobXは警告を発します。
observableTodoStore.todos[1].task = ("Maybe something more effortless");

デバッグ

個人的には、クロームがとても気に入っている。 Redux DevToolsエクステンション.アプリの状態をざっと見ることができ、状態の変更ごとに行ったり来たりできる(タイムトラベル!)素晴らしい機能がある。このようなことが可能なのは、前の状態を変更しないという原則があるからだ。

ストアに抽象化されたレイヤーが増えることで、デバッグのプロセスが難しくなる。その MobXクローム拡張機能 しかし、慣れるには時間が必要かもしれない。

しかし、例えば、次のようなものがある。 オートラン を使い始めると、おそらくたくさん使うことになるであろうトラック機能。 モブエックス で、状態がいつ変化するかをチェックしたい。注意しなければならないのは、この関数は観測した変化だけを追跡するということだ。それは、関数が初めて実行された時点で決定されます。 モブエックス は、その最初の呼び出しの間に読み込まれたすべてのobservableを購読し、それらが変更されるたびにトリガーされます。

人気

人気を見ると、ここではリダックスが勝っている。近い 4M ダウンロード npmからの週当たり MobXに45万ドル.また、各ライブラリのGitHubのリポジトリにおけるコントリビューターの数(~870 > 270)と星の数(57k > 24k)を見ると、Reduxが有名ブランドであることがわかる。

その一方で JSの現状2020レポート 両者の満足度はほぼ同じである。 プロジェクト.

JS2020データレイヤー・ライブラリ満足度チャート

このグラフの満足度は、"また利用したい/(また利用したい+利用したくない)"と表現されている。

結論

このコンテストに勝者はいない...まだね!ちなみに、コンテストは全くありませんでした😉私は、どちらのライブラリも基本的なタスクを達成することで素晴らしい仕事をしていると信じています。 JSアプリケーション .との毎日の仕事を見るには、もう少し時間が必要だ。 モブエックス とは異なる リダックス どのような場合にお勧めできるのか。

今のところ、ReduxのDevToolsの "タイムトラベル "がすでに恋しいと言える。 モブエックス とてもわかりやすく、書かれたコードもずっと読みやすく見える。

とはいえ、どのような形で 可観測 マジックを見るたびに、自分のPCのリソース(CPU時間、メモリ、ドライブなど)がどのくらい使われていて、どのくらい効率的なのか気になる。それが私の次の研究段階になることは間違いない。

願わくば、このような特殊な問題をどのように解決できるかについて、本当にエキサイティングな説明をお返ししたいと思います。 モブエックス.それではまた!

関連記事

フィンテック

Rubyの5つの活用例

Rubyで何ができるのだろうと思ったことはないだろうか。まあ、可能性は無限大でしょうが、多少なりとも知られている事例についてお話しできれば幸いです。

The Codest
パヴェル・ムジンスキー Software Engineer
ソフトウェア開発

パックワークによるRuby on Railsのモジュール化 エピソード1

人間は、多くの時間と労力を割かなければ、問題の全体像を把握することが難しい。これは特に、大規模で複雑なアプリケーションを扱っているときに起こる......。

ニコラ・ニソリア
ソフトウェア開発

Packwerk Episode IIによるRuby on Railsのモジュール化

Packwerkを使ったRuby on Railsモジュール化の第2回では、パッケージとしてのアプリケーションのコンセプトを詳しく見ていこう。

ニコラ・ニソリア
E-commerce

サイバーセキュリティのジレンマデータ漏洩

クリスマス前の駆け込み需要が本格化している。愛する人への贈り物を求めて、人々はますますオンラインショップを "襲撃 "することを厭わなくなっている。

The Codest
ヤクブ・ヤクボヴィッチ CTO & 共同創設者
エンタープライズ&スケールアップ・ソリューション

なぜRuby on RailsでMVPを作れるのか?

MVPは、製品の迅速な構築と市場導入のための最良の方法の1つである。この手法のおかげで、開発期間の大部分を節約することができる。

ヌノ・バルボーザ

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    Copyright © 2026 by The Codest. All rights reserved.

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese