目次
観察可能
autorun
計算
ホームページ ウェブフロントエンド jsチュートリアル MOBXを使用してJavaScriptアプリケーション状態を管理する方法

MOBXを使用してJavaScriptアプリケーション状態を管理する方法

Feb 17, 2025 am 08:57 AM

How to Manage Your JavaScript Application State with MobX

How to Manage Your JavaScript Application State with MobX

この記事は、ミシェル・ウェストストレートとアーロン・ボイヤーによって査読されました。 SetePointのコンテンツを完璧にしてくれたSetePointのすべてのピアレビューアに感謝します!

jQueryを使用して非常に単純なものよりも複雑なアプリケーションを作成したことがある場合は、UIの異なる部分を同期させるという問題があった可能性があります。多くの場合、データの変更は複数の場所に反映される必要があり、アプリケーションが成長するにつれて、トラブルに陥る可能性があります。この混乱を制御するために、イベントを使用して、アプリケーションのさまざまな部分に変更がいつ発生したかを知らせることができます。

では、今日どのようにアプリケーションステータスを管理しましたか?私はあなたが変更を過剰に登録していると言うために自由を取ります。それは正しい。私もあなたを知りませんが、私はそれを指摘するつもりです。もしあなたが過度にサブスクライブしていないなら、あなたはあまりにも一生懸命働いたと確信しています。

もちろん、

mobxを使用しない限り…

キーポイント

  • MOBXで国家管理を簡素化:観察可能なオブジェクトを介してアプリケーション状態を効率的に管理し、Reduxなどの他の州の管理ライブラリにある複雑さとボイラープレートコードを削減します。
  • mobx自動更新: MOBXのautorun機能を実装して、MOBXの
  • 関数を実装して、手動イベント処理なしの状態の変更に応じてUIコンポーネントを自動的に更新し、アプリケーション全体の同期プロセスを簡素化します。
  • 計算値を使用してパフォーマンスを向上させる:
  • MOBXからの計算値を使用して状態からデータを導出し、必要な場合にのみコンポーネントが再レンダリングされるようにし、全体的なアプリケーションパフォーマンスを改善します。
  • mobxは簡単に開始できます。
  • 標準オブジェクトを観測可能なオブジェクトに変換して、既存のJavaScriptアプリケーションにMOBXをシームレスに統合し、完全な書き換えなしで徐々に採用できるようにします。
  • MOBX操作によるトランザクション修正:
  • MOBX操作を適用して、トランザクションの状態変更をカプセル化し、それによりバッチ更新をバッチ更新し、冗長レンダリングを最小限に抑え、より効率的でエラーが発生するコードが少なくなります。

「状態」とは何ですか?

fullName()これはキャラクターです。ねえ、それは私です!私は最初の名前、最後の名前、年齢を持っています。また、問題がある場合は、

関数が表示される場合があります。
var person = {
  firstName: 'Matt',
  lastName: 'Ruby',
  age: 37,
  fullName: function () {
    return this.firstName + ' ' + this.lastName;
  }
};
ログイン後にコピー
ログイン後にコピー

この人への変更のさまざまな出力(ビュー、サーバー、デバッグログ)にどのように通知しますか?これらの通知をいつトリガーしますか? Mobxの前に、カスタムJQueryイベントまたはJS-Signalsをトリガーするセッターを使用します。これらのオプションは私によく役立ちますが、それらの私の使用は細心の注意とはほど遠いものです。人オブジェクトの一部が変更された場合、「変更された」イベントをトリガーします。

自分の名前を表示するビューコードがあるとします。年齢を変えると、その人の変更されたイベントに縛られているため、ビューは更新されます。 <🎜>
var person = {
  firstName: 'Matt',
  lastName: 'Ruby',
  age: 37,
  fullName: function () {
    return this.firstName + ' ' + this.lastName;
  }
};
ログイン後にコピー
ログイン後にコピー

このオーバートリガーをどのように締めますか?単純。各フィールドにセッターを設定し、各変更に対して個別のイベントを設定するだけです。待ってください - 年齢と最初の名前を一度に変更したい場合は、オーバートリガーを開始できます。両方の変更が完了するまで、イベントの発砲を遅らせる方法を作成する必要があります。それは仕事のように聞こえます、そして私は怠け者です...

Mobxが救助に来ます

Mobxは、Michel Weststrateが開発したシンプルで、集中的で、効率的で目立つ州管理ライブラリです。

mobxドキュメントから:

州について何かをするだけで、Mobxはあなたのアプリケーションがこれらの変更を尊重することを確認します。

person.events = {};

person.setData = function (data) {
  $.extend(person, data);
  $(person.events).trigger('changed');
};

$(person.events).on('changed', function () {
  console.log('first name: ' + person.firstName);
});

person.setData({age: 38});
ログイン後にコピー

違いに気づきましたか? mobx.observable私が行った唯一の変更です。もう一度console.logの例をチェックしてみましょう:

var person = mobx.observable({
  firstName: 'Matt',
  lastName: 'Ruby',
  age: 37,
  fullName: function () {
    return this.firstName + ' ' + this.lastName;
  }
});
ログイン後にコピー

autorunを使用して、mobxはアクセスされたコンテンツのみを観察します。

これがきれいだと思うなら、次のことをチェックしてください:

mobx.autorun(function () {
  console.log('first name: ' + person.firstName);
});

person.age = 38; // 打印为空
person.lastName = 'RUBY!'; // 仍然为空
person.firstName = 'Matthew!'; // 此处触发
ログイン後にコピー

興味がありますか?私はあなたが興味を持っていることを知っています。

mobx coreコンセプト

観察可能

mobx.autorun(function () {
  console.log('Full name: ' + person.fullName);
});

person.age = 38; // 打印为空
person.lastName = 'RUBY!'; // 触发
person.firstName = 'Matthew!'; // 也触发
ログイン後にコピー

MOBX観測可能なオブジェクトは、単なるオブジェクトです。この例では、私は何も観察していません。この例は、既存のコードベースにMOBXを統合する方法を示しています。開始するには、mobx.observable()またはmobx.extendObservable()を使用してください。

autorun

var log = function(data) {
  $('#output').append('' +data+ '');
}

var person = mobx.observable({
  firstName: 'Matt',
  lastName: 'Ruby',
  age: 34
});

log(person.firstName);

person.firstName = 'Mike';
log(person.firstName);

person.firstName = 'Lissy';
log(person.firstName);
ログイン後にコピー

あなたの観測可能性が変わったら何をしたいですか?参照された観測可能な値が変更されたときにコールバックをトリガーするautorun()を紹介させてください。上記の例では、年齢が変わったときにautorun()が発砲しないことに注意してください。

計算

var person = mobx.observable({
  firstName: 'Matt',
  lastName: 'Ruby',
  age: 0
});

mobx.autorun(function () {
  log(person.firstName + ' ' + person.age);
});

// 这将打印Matt NN 10次
_.times(10, function () {
  person.age = _.random(40);
});

// 这将什么也不打印
_.times(10, function () {
  person.lastName = _.random(40);
});
ログイン後にコピー

そのfullName機能を見ましたか?パラメーターがないことに注意してください。 MOBXは、自動的に計算値を作成します。これは私のお気に入りのMOBX機能の1つです。 getについて奇妙なことがあることに注意してください。もう一度見てください。これは関数です、あなたはそれを呼ぶことなく結果を見ることができます!通常、person.fullNameの代わりにperson.fullName()を呼び出します。あなたはちょうどあなたの最初のJSゲッターに会いました。 person.fullName

ここでは楽しみが終わりません! MOBXは、計算された値の依存関係を変更の依存関係を監視し、変更時にのみ実行されます。何も変わらない場合、キャッシュされた値が返されます。次の状況を参照してください:

ここでは、

計算を複数回ヒットしたことがわかりますが、機能が実行されるのはFirstNameまたはLastNameが変更されたときだけです。これは、MOBXがアプリケーションを大幅にスピードアップできる方法の1つです。
var person = mobx.observable({
  firstName: 'Matt',
  lastName: 'Ruby',
  age: 0,
  get fullName () {
    return this.firstName + ' ' + this.lastName;
  }
});
log(person.fullName);

person.firstName = 'Mike';
log(person.fullName);

person.firstName = 'Lissy';
log(person.fullName);
ログイン後にコピー

もっと! person.fullName

私はもう素晴らしいmobx文書を書き続けません。観察可能なオブジェクトを使用および作成するためのより多くの方法については、ドキュメントをご覧ください。

(以下のコンテンツはいくつかのコードの例と詳細な説明を省略し、コアコンテンツと構造を保持します)

mobxを使用する

あまりにも退屈になる前に何かを作りましょう。

これは、変化するたびにその人のフルネームを表示する単純な非MOBXの例です。

名前を変更したことはありませんが、名前は10回レンダリングされたことに注意してください。多くのイベントを使用してこの問題を最適化するか、何らかの変更ペイロードを確認することができます。これはあまりにも多くの作業です。

これは、mobx:

で構築された同じ例です

イベント、トリガー、またはオンがないことに注意してください。 Mobxを使用すると、最新の価値とそれが変わったという事実を扱っています。一度だけレンダリングされたことに注意してください。これは、私が監視しているものを変更していないためです。 autorun

少し些細なものを構築しましょう:

ここでは、個人全体を編集し、データ出力を自動的に監視することができます。この例にはいくつかのソフトポイントがあり、最も注目すべきことは、入力値が人物と同期していないことです。この問題を解決しましょう:

私は知っています、あなたは別の不満を持っています:「あなたは過度にレンダリングされています!」これが、多くの人がReactを使用することを選択する理由です。 Reactを使用すると、個別にレンダリングできるウィジェットに出力を簡単に分割できます。

完全性については、ここに私が最適化したjQueryの例があります。

実際のアプリでこのようなことをしますか?おそらくそうではありません。この粒度が必要な場合は、いつでもReactを使用します。実際のアプリケーションでMobxとjQueryを使用するとき、私はそれを変更するたびにDOM全体を再構築しないほど十分に微妙に微妙に使用されます。

autorun()あなたはこの点に来たので、ここではReactとMobxで構築された同じ例です

スライドショーを構築しましょう

スライドショーのステータスをどのように表現しますか?単一のスライド工場から始めましょう:

すべてのスライドを集約するための何かが必要です。今すぐ構築しましょう:

スライドショーが始まりました!これは、コレクションからスライドを追加および削除し、それに応じてUIを更新できるスライドの観測可能な配列があるため、より興味深いものです。次に、計算された値を追加します。これは、必要に応じて最新の状態に保ちます。

スライドショーをレンダリングしましょう。 HTML出力の準備ができていないため、コンソールにのみ印刷します。 activeSlide

かっこいいです、いくつかのスライドがあります

現在のステータスを印刷しました。 1つまたは2つのスライドを変更しましょう:

私たちのautorunが機能しているように見えます。監視が何かを変更すると、発射されます。コンソールからHTMLへの出力派生を変更しましょう:

このスライドショーの基本的なディスプレイがありましたが、相互作用はまだありません。サムネイルをクリックしてメイン画像を変更することはできません。ただし、画像テキストを簡単に変更して、コンソールを使用してスライドショーを追加できます。 autorun選択したスライドショーをセットアップするための最初で唯一のアクションを作成しましょう。次の追加を追加してautorunを変更する必要があります

尋ねることができます、なぜ操作を使用する必要があるのですか?良い質問! MOBX操作は、観察可能な値の変化の他の例に示されているように、必要ありません。

操作はいくつかの面で役立ちます。まず、すべてのMOBX操作はトランザクションで実行されます。これは、私たちのautorunおよび他のMOBX反応が、トリガーする前に操作が完了するのを待つことを意味します。それについて考えてください。トランザクションの外側のアクティブなスライドを無効にして、次のスライドをアクティブにしようとするとどうなりますか?私たちのautorunは2回トリガーされます。表示可能なアクティブなスライドがないため、最初の実行は厄介です。

トランザクションの性質に加えて、MOBX運用はデバッグを容易にする傾向があります。 mobx.actionに渡した最初のオプションパラメーターは、文字列「アクティブスライドを設定」です。この文字列は、mobxのデバッグAPIを使用して出力できます。

では、操作があります。JQueryを使用して次のように接続しましょう。

それだけです。これで、サムネイルをクリックすると、アクティビティが予想どおりに伝播されます。これがスライドショーの実用的な例です。

これは、Reactを使用した同じスライドショーの例です。

メモ、モデルをまったく変更しませんでしたか? MOBXに関しては、ReactはjQueryやコンソールなどのデータのもう1つの派生語です。

jQueryスライドショーの例

の警告 jQueryの例を何らかの形で最適化しなかったことに注意してください。スライドショーDOM全体を変更するたびに破壊します。壊すことで、スライドショーのすべてのHTMLをクリックするたびに置き換えることを意味します。強力なjQueryベースのスライドショーを構築している場合は、アクティブなクラスを設定および削除し、

の属性を変更することにより、最初のレンダリング後にDOMを調整できます。

mainImageもっと知りたいですか? src

mobxの詳細については、以下の便利なリソースをご覧ください。

ご質問がある場合は、以下のコメントでお知らせいただくか、Mobx Gitterチャンネルで見つけてください。

mobx

でJavaScriptアプリケーションステータスの管理に関する

FAQ

(記事が長すぎてコアコンテンツとはほとんど関係がないため、FAQパーツは次のコンテンツから省略されています。)

以上がMOBXを使用してJavaScriptアプリケーション状態を管理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は?
または:
Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は? または: Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Apr 04, 2025 pm 05:36 PM

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptの進化:現在の傾向と将来の見通し JavaScriptの進化:現在の傾向と将来の見通し Apr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは学ぶのが難しいですか? JavaScriptは学ぶのが難しいですか? Apr 03, 2025 am 12:20 AM

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? Apr 04, 2025 pm 02:06 PM

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...

See all articles