目次
キーテイクアウト
実用的な例 - 「プロジェクトリスト」
最終コンポーネント、テスト、および備品
効果的な思考の重要なコンポーネントは何ですか?
効果的な思考は、いくつかの重要なコンポーネントを含む多面的なプロセスです。これらには、明確さ、精度、精度、関連性、深さ、幅、論理、重要性、および公平性が含まれます。これらの各コンポーネントは、思考プロセスが効果的であり、正確な結論につながることを保証する上で重要な役割を果たします。
批判的思考の深さの重要性は何ですか?問題や問題、その根本的な原因や意味を理解し、複数の視点からそれを探求するために。思考の幅は、幅広い視点、アイデア、情報源を考慮することが含まれます。オープンマインドで好奇心が強く、新しいアイデアや視点を探求することをいとわないことを必要とします。
精度は効果的な思考にどのように貢献しますか?
批判的思考における正確性の重要性は何ですか? 、アイデア、結論は正しく、信頼性が高く、エラーや歪みがありません。健全な決定と判断を下すためには重要です。
思考の明確さを改善するには、明確なコミュニケーションの実践、専門家や複雑な言語の避け、努力することが含まれます。私たちの思考と表現のシンプルさと単純さ。

コンポーネントでの考え方

Feb 21, 2025 am 09:54 AM

コンポーネントでの考え方

キーテイクアウト

  • インターフェイス開発へのコンポーネントアプローチは、ビジネスドメインをモデリングするのではなく、相互作用の最小の抽象的なセクションに焦点を当てた従来のMVCおよびMVVMフレームワークよりも利点を提供します。
  • コンポーネントは、再利用し、ビジネスドメインから距離を置き、さまざまなコンテキストに適応できるように設計する必要があります。このアプローチは、特定のタイプのヘルプ検索コンポーネントではなく、普遍的に使用できる示唆的なテキスト入力コンポーネントの作成に例示することができます。
  • コンポーネートコンポーネントへのインターフェイスを分解すると、開発プロセスが簡素化されるだけでなく、孤立したテストが容易になります。コンポーネントは互いに独立しているため、システム全体に干渉することなく修正や追加が可能です。
  • Webコンポーネント、React、ポリマー、フライト - すべては、インターフェイスコンポーネントの構築を目的としています。これは、Big MVCおよびMVVMフレームワークとは異なるツールセットであり、インターフェイスを実装する方法を計画する際には、異なる考え方が必要です。私はまだサーバーアプリケーションにMVCなどのモデルを使用していますが、インターフェイス開発のコンポーネントアプローチの利点に専用の変換です。この記事では、コンポーネントでの思考がMVCでの考え方とはどのように異なるかを概説し、そのアプローチを実際の例で実装します。
  • 私の考えでは、MVCデザインのヘッドスペースは「ビジネスドメインをモデル化するにはどうすればよいですか?そのドメインとの対話プロセスをモデル化するにはどうすればよいですか?これらのプロセスを容易にするためにインターフェイスをモデル化するにはどうすればよいですか?」このヘッドスペースは、優れたコンポーネント設計を促進しないということです。実際、インターフェイスを構成可能なコンポーネントに分解するために着手したときに、どのように考えるべきかについての極の反対です。せいぜいマイクロアプリになります。最悪の場合、あなたは神の要素を構築します。最後にやりたいことは、ビジネスドメインをコンポーネントとしてモデル化することです。あなたがモデル化することを目指すのは、あなたが説明できる相互作用の最小の抽象的なセクションです。 再利用のための設計

「この却下可能なアラートパネルを作成するにはどうすればよいですか?」の代わりに、「この相互作用を容易にするために新しいHTML要素を追加していたら、彼らはどうなりますか?」と自問してください。これは、ビジネスドメインから安全に距離を置き、本質的に異なるコンテキストで最も再利用可能なコンポーネントにつながると思います。

別の例として、ヘルプシステムの検索を許可するすべての場所で使用されるタイプのヘルプ検索コンポーネントを作成しないでください。次に、データのリクエストを受信する方法を知っているAPIデータコンポーネントを検索し、ヘルプ検索APIと対話し、結果をブロードキャストします。これで、提示的なテキスト入力のテストではAPIのあざけりは必要ありません。「タグ」フィールドに提案を追加するように求められた場合、既存の示唆的なテキスト入力コンポーネントをドロップし、説明するシンプルなデータコンポーネントを配線できます。タグAPIに、そして完了!

実用的な例 - 「プロジェクトリスト」

具体的な例では、単純なインターフェイスを孤立したコンポーネントとして実装することを見てみましょう。次のモックアップは、99designs 1-to-1プロジェクトシステムからの抽出です。 UIは大幅に簡素化されていますが、執筆時点で私たちが築き上げるJavaScriptは、サイトからの生産コードです。これがワイヤーフレームです:

コンポーネントでの考え方

私たちが持っているのは、アクティブ、ドラフト、アーカイブの3つのプロジェクトの3つのリスト間のナビゲーションです。各プロジェクトには、アクティブなプロジェクトのアーカイブ、ドラフトの削除、アーカイブプロジェクトの再アクティブなど、実行できるアクションがあります。アプリのデザインの考えでは、プロジェクトのモデリングを開始し、「アーカイブ」や「削除」などのメソッドを提供し、「ステータス」プロパティを属する「ステータス」プロパティを追跡します。まさに私たちが避けたいことなので、私たちは相互作用とそれらを促進するために必要なものだけに関心を持っています。

その中心には、行ごとのアクションがあります。そのアクションが実行されたら、リストから行を削除します。すでにプロジェクト固有のドメインの知識を当てています!さらに、各リストにいくつのアイテムがあるかについてカウントがあります。この記事の範囲を抑えるために、各ページがサーバー側に生成されると仮定し、タブナビゲーションがフルページの更新を引き起こします。 JavaScriptに強制的に依存する必要はないため、アクションボタンは、フォームのアクションを非同期的に実行し、完了したときにイベントをブロードキャストするイベントハンドラーを送信するフォーム要素になります。

1つのプロジェクト行のHTML:

を次に示します

コンポーネントを構築するためにフライトを使用します。フライトは現在、以前のSitePoint JavaScriptの記事で概説した理由から、99DesignsのデフォルトのJSコンポーネントライブラリです。
<span><span><span><li</span>></span>
</span>  <span><span><span><a</span> href<span>="/projects/99"</span> title<span>="View project"</span>></span>Need sticker designs for XYZ Co.<span><span></a</span>></span>
</span>  <span><span><span><div</span> class<span>="project__actions"</span>></span>
</span>    <span><span><span><a</span> href<span>="/projects/99"</span> class<span>="button"</span>></span>View<span><span></a</span>></span>
</span>    <span><span><span><form</span> class<span>="action"</span> action<span>="/projects/99/archive"</span> method<span>="post"</span>></span>
</span>        <span><span><span><button</span>></span>Archive<span><span></button</span>></span>
</span>    <span><span><span></form</span>></span>
</span>  <span><span><span></div</span>></span>
</span><span><span><span></li</span>></span></span>
ログイン後にコピー
ログイン後にコピー
フォームの送信を処理し、イベントを放送するためのAsyncformコンポーネントは次のとおりです。

JavaScriptにクラス属性を使用しないという厳格なポリシーを維持するため、アクションフォームにデータアジンフォーム属性を追加し、次のようなすべてのマッチングフォームにコンポーネントを添付します。
<span><span><span><li</span>></span>
</span>  <span><span><span><a</span> href<span>="/projects/99"</span> title<span>="View project"</span>></span>Need sticker designs for XYZ Co.<span><span></a</span>></span>
</span>  <span><span><span><div</span> class<span>="project__actions"</span>></span>
</span>    <span><span><span><a</span> href<span>="/projects/99"</span> class<span>="button"</span>></span>View<span><span></a</span>></span>
</span>    <span><span><span><form</span> class<span>="action"</span> action<span>="/projects/99/archive"</span> method<span>="post"</span>></span>
</span>        <span><span><span><button</span>></span>Archive<span><span></button</span>></span>
</span>    <span><span><span></form</span>></span>
</span>  <span><span><span></div</span>></span>
</span><span><span><span></li</span>></span></span>
ログイン後にコピー
ログイン後にコピー

今では、アクションを実行する能力があり、成功してDOMツリーを伝播するイベントをブロードキャストすることができます。次のステップは、そのイベントを聞いて、泡立つ行を削除することです。そのために取り外し可能です:

<span>define(function(require) {
</span>  <span>'use strict';
</span>
  <span>var defineComponent = require('flight/lib/component');
</span>
  <span>function <span>AsyncForm</span>() {
</span>    <span>this.defaultAttrs({
</span>      <span>broadcastEvent: 'uiFormProcessed'
</span>    <span>});
</span>
    <span>this.after('initialize', function() {
</span>      <span>this.on(this.node, 'submit', this.asyncSubmit.bind(this));
</span>    <span>});
</span>
    <span>this.asyncSubmit = function(event) {
</span>      event<span>.preventDefault();
</span>      $<span>.ajax({
</span>        <span>'url': this.$node.attr('action'),
</span>        <span>'dataType': 'json',
</span>        <span>'data': this.$node.serializeArray(),
</span>        <span>'type': this.$node.attr('method')
</span>      <span>}).done(function(response<span>, data</span>) {
</span>        <span>this.$node.trigger(this.attr.broadcastEvent, data);
</span>      <span>}.bind(this)).fail(function() {
</span>        <span>// error handling excluded for brevity
</span>      <span>});
</span>    <span>};
</span>  <span>}
</span>
  <span>return defineComponent(AsyncForm);
</span><span>});</span>
ログイン後にコピー

再び、プロジェクトの行にデータ取り外し可能な属性を追加し、コンポーネントを行要素に添付します。

<span>AsyncForm.attachTo('[data-async-form]');</span>
ログイン後にコピー
完了!それぞれ1つのイベントがある2つの小さなコンポーネントがあり、3つの形式で3つのタイプのアクションを優雅に劣化させる方法で処理しました。残っているのは1つだけで、それが各タブにカウントされます。簡単にする必要があります。必要なのは、行が削除されるたびにアクティブタブのカウントを1つだけ減らすことです。でも待って!アクティブなプロジェクトがアーカイブされると、アーカイブカウントが増加する必要があり、アーカイブされたプロジェクトが再活性化されると、アクティブ化されたカウントが増加する必要があります。最初に、その数を変更するための指示を受けることができるカウントコンポーネントを作成してください:

<span>define(function(require) {
</span>  <span>'use strict';
</span>
  <span>var defineComponent = require('flight/lib/component');
</span>
  <span>function <span>Removable</span>() {
</span>    <span>this.defaultAttrs({
</span>      <span>'removeOn': 'uiFormProcessed'
</span>    <span>});
</span>
    <span>this.after('initialize', function() {
</span>      <span>this.on(this.attr.removeOn, this.remove.bind(this));
</span>    <span>});
</span>
    <span>this.remove = function(event) {
</span>      <span>// Animate row removal, remove DOM node, teardown component
</span>      $<span>.when(this.$node
</span>        <span>.animate({'opacity': 0}, 'fast')
</span>        <span>.slideUp('fast')
</span>      <span>).done(function() {
</span>        <span>this.$node.remove();
</span>      <span>}.bind(this));
</span>    <span>};
</span>  <span>}
</span>
  <span>return defineComponent(Removable);
</span><span>});</span>
ログイン後にコピー
私たちのカウントは、htmlで 4 のようなものとして表されます。カウントはドキュメントレベルでイベントに耳を傾けるため、イベントプロパティがヌルになります。これにより、このインスタンスが聞くべきイベントを定義し、同じイベントで指示を聞いている複数のカウントインスタンスが誤っていることを防ぐように強制されます。

パズルの最後のピースは、取り外し可能なカウンターにモディファイアを使用してイベントを発射するために取り外し可能なインスタンスを取得することです。コンポーネント間のカップリングは確かに必要ないので、取り外し可能なイベントが削除されたときに発射するための属性を取り外し可能にします。
<span>Removable.attachTo('[data-removable]');</span>
ログイン後にコピー

ここで、カウントとリムーバブルの間の結合は、コンポーネントをDOMに添付するユースケース固有のページスクリプトで発生します。

<span>define(function(require) {
</span>  <span>'use strict';
</span>
  <span>var defineComponent = require('flight/lib/component');
</span>
  <span>function <span>Count</span>() {
</span>    <span>this.defaultAttrs({
</span>      <span>'event': null
</span>    <span>});
</span>
    <span>this.after('initialize', function() {
</span>      <span>this.on(document, this.attr.event, this.update.bind(this));
</span>    <span>});
</span>
    <span>this.update = function(event<span>, data</span>) {
</span>      <span>this.$node.text(
</span>        <span>parseInt(this.$node.text(), 10) + data.modifier
</span>      <span>);
</span>    <span>}
</span>  <span>}
</span>
  <span>return defineComponent(Count);
</span><span>});</span>
ログイン後にコピー
ミッションが達成されました。私たちのカウンターは、私たちのプロジェクトリストの行を何も知りません。そして、プロジェクトのリストの概念を中心に設計されたほんのわずかな方法ではありません。

最後の追加

<span>Count.attachTo(
</span>  <span>'[data-counter="active"]',
</span>  <span>{'event': 'uiActiveCountChanged'}
</span><span>);
</span>
<span>Count.attachTo(
</span>  <span>'[data-counter="draft"]',
</span>  <span>{'event': 'uiDraftCountChanged'}
</span><span>);
</span>
<span>Count.attachTo(
</span>  <span>'[data-counter="archived"]',
</span>  <span>{'event': 'uiArchivedCountChanged'}
</span><span>);</span>
ログイン後にコピー
私たちのUXデザイナーは、このアクションを取り消すことができないため、誰かがドラフトを削除しようとしたときに確認を求めた方が良いと指摘しました。問題ありません。まさにそれを行うコンポーネントをホイップすることができます。

それを削除ボタンに添付すると、求められたものがあります。 [確認]ダイアログはボタンを傍受し、ユーザーが「OK」を選択した場合にフォームの送信を許可します。互いに干渉することなくこれらのコンポーネントを構成できるため、非同期コンポーネントを変更する必要はありませんでした。本番コードでは、フォームが送信され、複数の提出を防ぐ視覚的なフィードバックを提供するアクションボタンにSinglesubmitコンポーネントを使用します。

最終コンポーネント、テスト、および備品

この記事が、プロジェクトがインターフェイスを構成可能なコンポーネントに分解することでどのように利益を得るかを示すことを願っています。私がカバーしていないコンポーネントデザインの重要な利点は、孤立したテストの容易さです。そのため、ジャスミンテストとHTMLテストフィクスチャとともに最終コンポーネントを次に示します。

    asyncform
  • リムーバブル
  • count
  • 確認
私がカバーしたものについて質問がある場合は、コメントで詳細をお願いします。

思考コンポーネントに関するよくある質問(FAQ)

効果的な思考の重要なコンポーネントは何ですか?

効果的な思考は、いくつかの重要なコンポーネントを含む多面的なプロセスです。これらには、明確さ、精度、精度、関連性、深さ、幅、論理、重要性、および公平性が含まれます。これらの各コンポーネントは、思考プロセスが効果的であり、正確な結論につながることを保証する上で重要な役割を果たします。

批判的思考スキルを改善するにはどうすればよいですか?仮定に疑問を投げかけ、多様な視点を求め、新しいアイデアに開かれているなどの習慣。また、分析、解釈、推論、評価、説明、自己規制などのスキルの開発も含まれます。批判的思考。それは、正しく推論する能力、施設からの結論を導き、主張を評価し、推論の誤りやエラーを避ける能力を伴います。私たちが検討している情報やアイデアは、手元の問題や問題に直接関係しています。焦点を合わせ続け、気を散らすことや無関係な情報を避けるのに役立ちます。

批判的思考の深さの重要性は何ですか?問題や問題、その根本的な原因や意味を理解し、複数の視点からそれを探求するために。思考の幅は、幅広い視点、アイデア、情報源を考慮することが含まれます。オープンマインドで好奇心が強く、新しいアイデアや視点を探求することをいとわないことを必要とします。

批判的思考における公平性の役割は何ですか?そして客観的。関連するすべての視点と証拠を考慮し、好意、偏見、または偏見を避ける必要があります。

精度は効果的な思考にどのように貢献しますか?

​​

思考の精度は、私たちの思考や表現において正確で、詳細な、明確であることを伴います。あいまいさ、あいまいさ、または混乱を避け、アイデアを効果的に伝えるのに役立ちます。

批判的思考における正確性の重要性は何ですか? 、アイデア、結論は正しく、信頼性が高く、エラーや歪みがありません。健全な決定と判断を下すためには重要です。

どうすれば自分の思考の明快さを改善することができますか?

思考の明確さを改善するには、明確なコミュニケーションの実践、専門家や複雑な言語の避け、努力することが含まれます。私たちの思考と表現のシンプルさと単純さ。

以上がコンポーネントでの考え方の詳細内容です。詳細については、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。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

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

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

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

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

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コンピューティングの可能性をカバーしています。

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

See all articles