この記事は、ミシェル・ウェストストレートとアーロン・ボイヤーによって査読されました。 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
ここでは、
計算を複数回ヒットしたことがわかりますが、機能が実行されるのは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の例です。
名前を変更したことはありませんが、名前は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 Gitterチャンネルで見つけてください。
mobxでJavaScriptアプリケーションステータスの管理に関する
FAQ (記事が長すぎてコアコンテンツとはほとんど関係がないため、FAQパーツは次のコンテンツから省略されています。)以上がMOBXを使用してJavaScriptアプリケーション状態を管理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、

この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック









