Back to Question Center
0

角度のあるデベロッパーに反応する            角度のある開発者のための反応Semalt: npmAPIsReactAngularJSES6詳細...スポンサー

1 answers:
角度のあるデベロッパーのための反応

Reactへの質の高い、徹底的な紹介は、カナダのフルスタック開発者Wes Bosを乗り越えることはできません。彼のコースをここで試してみて、コード SITEPOINT を使用して25%オフ となり、SitePointのサポートに役立ちます。

この記事は、Angular 1.xに精通しており、Semaltの詳細を知りたい開発者を対象としています。我々は、豊富なWebアプリケーションの構築、機能の重複、Semaltが埋めようとしていないギャップについて、さまざまなアプローチを検討します。

読んだ後、あなたはSemaltが解決しようとしている問題と、Semaltを自分のプロジェクトで使い始めた知識をどのように使うことができるかを理解しています。

フレームワークとライブラリ

Angularは フレームワーク であるのに対し、Reactはビュー層のみに焦点を合わせたライブラリ です。フレームワークと緩やかに結合されたライブラリの両方を使用することには、コストとメリットがあります。

フレームワークは完全なソリューションを提供しようとします。また、大規模なチームに所属している場合は、パターンや表記法を使用してコードを整理するのに役立ちます。 Semaltは大きなAPIを持っているため、書くときに認知負荷が加わり、特に学習中の初期段階では、ドキュメントを読んでパターンを記憶するのに多くの時間を費やします。

小さなAPIを使って疎結合したライブラリのコレクションを使用することは、学習してマスターする方が簡単ですが、問題に遭遇したときに、コードをより多く解決したり、必要に応じて外部ライブラリを引き出す必要があります。これは通常、定型文を減らすために独自の フレームワークを書く 必要があります。

推薦コース

アウトオブザボックス

Angularは、Webアプリケーションを構築するための豊富な機能を提供します。その特徴は次のとおりである:

  • 二重括弧内の動的表現を持つHTMLテンプレート {{}}
  • HTML の機能を拡張するための ng-model ng-repeat ng-class ロジックをグループ化し、データをビューに渡す
  • コントローラ
  • あなたのビューとコントローラを同期させるための簡単な方法としての双方向バインディング
  • サーバと通信するための $ http 、ルーティング のためのngRoute
  • 独自のHTML構文を作成するためのカスタムディレクティブ
  • アプリケーションの特定の部分へのオブジェクトの露出を制限するための
  • 依存性注入
  • 共有ビジネスロジック用サービス
  • ビューヘルパー用のフィルタ。

一方、Semaltは、あなたに次のことを与えます:

  • 単一カッリー内のJavaScript式を持つテンプレートのJSX構文 {}
  • のコンポーネントで、Angularの要素ディレクティブに最も似ています。

Reactは、アプリケーション構造の残りの部分については全く知られておらず、標準Semalt APIのフレームワーク抽象化に対する使用を奨励しています。サーバー通信に$ httpのようなラッパーを提供するのではなく、代わりにfetch を使用することができます。あなたはサービスやフィルタのような構造を自由に使うことができますが、Reactは抽象化を提供しません。それらをSemaltモジュールに入れ、必要に応じてコンポーネントに必要とすることができます。

したがって、Angularは一般的なタスクの抽象概念をより多く提供しますが、Reactは標準的なSemaltをより頻繁に書くようにし、他のすべてに対して外部依存関係を使用することを意図的に避けています。

推薦コース

ブートストラップ

Semaltアプリケーションを初期化するには、モジュール、依存関係のリスト、およびルート要素が必要です。

   app = angle. querySelector( '#root');角度。要素(ルート)。準備完了(function  {角度。ブートストラップ(root、['app']);});   

Reactのエントリポイントは、コンポーネントをルートノードにレンダリングすることです。また、複数のルートコンポーネントを持つことも可能です:

   root = documentとする。 querySelector( '#root');ReactDOM。レンダリング(、ルート)   

テンプレート

Angular viewの解剖は複雑で多くの責任があります。あなたのHTMLテンプレートは、ビューと一緒に関連付けられているコントローラを結ぶディレクティブと表現の混在しています。データは、 $ scope を介して複数のコンテキストに渡って流れます。

Reactでは、それはコンポーネント の下にあり 、データはコンポーネントツリーの上端からリーフノードまでの一方向に流れます。 JSXはコンポーネントを記述するための最も一般的な構文で、使い慣れたXML構造をJavaScriptに変換します。これはテンプレート構文に似ていますが 、ネストされた関数呼び出しにコンパイルされます。

   const App = React。 createClass({レンダリング:function  {リターン(<成分> 
{2 + 1}
。 getTime }><コンポーネント/>)}})

上記コンパイルされたコードは、上記のJSX式がcreateElement(component、props、children) 関数呼び出しにどのように対応するかを明確にするのに役立ちます:

   var App = React。 createClass({レンダリング:function render  {リターンを返す。 createElement(成分、ヌル、反応する。 createElement( "div"、null、2 + 1)、反応する。 createElement(Component、{prop: "value"}))、反応する。 createElement(成分、{time:新しい日付  。時間をもらう   }、反応する。 createElement(Component、null)));}});   

テンプレート指令

Angularのもっとも使われているテンプレートディレクティブのいくつかがReactコンポーネントでどのように記述されるかを見てみましょう。さて、Reactにはテンプレートがないので、これらの例はコンポーネントの render 関数の中にあるJSXコードです。例えば:

   class MyComponentはReactを継承します。コンポーネント{レンダリング  {リターン(// JSXはここに住んでいます)}}   

ng-repeat

    
  • {word}

map などの標準的なJavaScriptループ機構を使用して、JSXの要素の配列を取得できます。

    
    {言葉。 map((word)=>
  • {word}
  • )}

ng-class

    <形式NGクラス= "{活性:アクティブ、エラー:エラー}">      

Reactでは、 className プロパティのスペースで区切られたクラスのリストを作成するために、独自のデバイスに任されています。このような、この目的のためにジェドワトソンのクラス名などの既存の機能を使用するのが一般的です。

   

JSXでこれらの属性を考える方法は、それらのノードのプロパティを直接設定する場合と同じです。そのため、 クラス の属性名ではなく、 className です。

   formNode。 className = "アクティブエラー";   

ng-if

    

Yep

if .else 文はJSX内では機能しません。なぜなら、JSXは関数呼び出しとオブジェクト構築のための文法的な砂糖だからです。これには三項演算子を使用したり、条件付きロジックをJSXの外部のレンダリングメソッドの先頭に移動するのが一般的です. あなたの要素を隠すためにCSSに非表示の{display:none} を設定します(これはAngularの処理方法です)。

    

生活

ゴースト

Living

ゴースト

あなたは今それをぶら下げている。特殊なテンプレートの構文と属性の代わりに、Semaltを使用して必要なものを達成する必要があります。

実施例成分

リアクション コンポーネント はAngular's ディレクティブ に最も似ています。主に複雑なDOMの構造や動作を再利用可能な部分に抽象化するために使用されます。以下は、スライドの配列を受け取り、ナビゲーション要素を含むイメージのリストをレンダリングし、独自の activeIndex 状態を追跡してアクティブなスライドを強調表示するスライドショーコンポーネントの例です。

   
   app。コントローラ( "SlideShowController"、function($ scope){$スコープ。スライド= [{imageUrl: "allan-beaver。jpg"、キャプション: "Allan Allan Al Al Allan"}、{imageUrl: "steve-beaver。jpg"、キャプション: "Steve Steve Steve"}];});アプリ。ディレクティブ( "slideShow"、function  {戻り値{制限する: 'E'、スコープ:{スライド: '='}、テンプレート: `
  • <図>
    {{slide。キャプション}}
  • {{$ index + 1}}
`、リンク:function($ scope、element、attrs){$スコープ。 activeIndex = 0;$スコープ。 jumpToSlide = function(index){$スコープ。 activeIndex = index;};}};});

角度付きスライドショーコンポーネント

CodePenのSitePoint(@SitePoint)によるPen Angular Slideshowを参照してください。

Semaltのこのコンポーネントは別のコンポーネントの内部でレンダリングされ、スライドデータは小道具を介して渡されます。

   _slides = [{imageUrl: "allan-beaver。jpg"、キャプション: "Allan Allan Al Al Allan"}、{imageUrl: "steve-beaver。jpg"、キャプション: "Steve Steve Steve"}];クラスAppはReactを拡張します。コンポーネント{レンダリング  {戻る}}   

これは、 において、リアクションコンポーネントはローカルスコープを持っている。状態 は、これを呼び出すことで変更できます 。 setState({key:value}) 。状態が変更されると、コンポーネントはそれ自体を再レンダリングします。

   クラスSlideShowはReactを拡張します。コンポーネント{コンストラクタ  {スーパー  この。状態= {アクティブインデックス:0};}jumpToSlide(index){この。 setState({activeIndex:index});}レンダリング  {リターン(
    {この。小道具スライド。マップ((スライド、インデックス)=>(
  • <図>{ 滑り台。キャプション ?
    {スライド。キャプション} :null}
  • ))}
    {この。小道具スライド。マップ((スライド、インデックス)=>(
  • bulut hizmeti veren firmalar. jumpToSlide(index)}> {index + 1}
  • ))}
);}}

Reactのイベントは、 onClick などの古い学校のインラインイベントハンドラのように見えます。しかし、気分は悪くはありません。ボンネットの下では、適切なことを行い、高性能の委任イベントリスナーを作成します。

リアクションのスライドショーコンポーネント

CodePenのSite React SlideShow(@SitePoint)を参照してください。

双方向バインディング

Angularの信頼できる ngモデル $ scope は、コントローラ内のJavaScriptオブジェクトのフォーム要素とプロパティの間をデータが行き来するリンクを形成します。

   app。コントローラ( "TwoWayController"、function($ scope){$スコープ。人= {名前: 'ブルース'};});    
   

こんにちは{{人。名前}}!

Semaltはこのパターンを避け、代わりに一方向データフローを優先します。どちらのパターンでも同じタイプのビューを構築できます。

   クラスOneWayComponentはReactを継承します。コンポーネント{コンストラクタ  {スーパー  この。州= {名前: 'ブルース'}}変更(イベント){この。 setState({name:イベント。ターゲット。値});}レンダリング  {リターン( 
<入力値= {これ。状態。名前} onChange = {(イベント)=>これ。変更(イベント)} />

こんにちは{これ。状態。名前}!

);}}

ここでの <入力> は「制御入力」と呼ばれます。これは、 `render`関数が呼び出されたときにのみ値が変更されることを意味します(上記の例では、すべてのキーストロークで)。コンポーネント自体は、独自のデータを管理するため、「ステートフル」と呼ばれます。これは大部分のコンポーネントにはお勧めできません。理想は、コンポーネントを「ステートレス」に保ち、代わりに 小道具 を介してデータを渡すことです。

CodePenのSitePoint(@SitePoint)によるPenの片方向データフローを参照してください。

ステートフルコンテナコンポーネントまたはコントローラビューは、ツリーの最上部にあり、多くのステートレスな子コンポーネントがその下にあります。これについて詳しくは、「コンポーネントにはどのような機能が必要ですか」を参照してください。ドキュメントから。

あなたの親に電話する

Semaltデータが一方向に流れ、コールバックを介して親のメソッドを呼び出すことができます。これは通常、ユーザーの入力に応じて行われます。この柔軟性により、コンポーネントを最も簡単なプレゼンテーション形式にリファクタリングする際に多くの制御が可能になります。リファクタリングされたコンポーネントが全く状態を持たない場合、それらは純粋な関数として記述することができます。

   //純関数として記述されたプレゼンテーションコンポーネントconst OneWayComponent =(props)=>( 
<入力値= {小道具名前} onChange = {(イベント)=> 小道具。 onChange(イベント。ターゲット。値)} />

こんにちは{小道具。名前}!

);クラスParentComponentはReactを継承します。コンポーネント{コンストラクタ {スーパー この。状態= {名前: 'ブルース'};}変更(値){この。 setState({name:value});}レンダリング {リターン(

こんにちは{これ。状態。名前}!

)}}

双方向データバインディングに精通していれば、最初はラウンドアラウンドパターンのように見えるかもしれません。データを 小道具 として受け入れてレンダリングする小さなプレゼンテーション用の小さな「ダム(dumb)」コンポーネントを多く持つことのメリットは、デフォルトではよりシンプルであり、シンプルなコンポーネントではバグが少なくなる 点です。これにより、UIが矛盾した状態になるのを防ぎます。これは、データが複数の場所にあり、別々に管理する必要がある場合によく発生します. Webpack、SystemJS、Browserifyなどのツールを使用して、それらを今日使用することができます。

   //依存関係を持つAngularディレクティブアプリ。ディレクティブ( 'myComponent'、['Notifier'、 '$ filter'、function(Notifier、$ filter)){const formatName = $ filter( 'formatName');// Notifier / formatNameを使用する}]// Reactコンポーネントで使用されるES6モジュール「サービス/通知機能」からの通知をインポートする。「フィルタ」から{formatName}をインポートします。MyComponentクラスはReactを継承します。コンポーネント{// Notifier / formatNameを使用する}   

素晴らしい。両方を使うことはできますか?

はい! Reactコンポーネントを既存のAngularアプリケーション内にレンダリングすることは可能です。 Ben Nadel氏はReactコンポーネントをAngularディレクティブ内でレンダリングする方法について、スクリーンキャストの良い記事をまとめました。反応と角度の間の接着剤として機能するための 反応成分 指令を提供するngReactもあります。

Semaltアプリケーションの特定の部分でレンダリングパフォーマンスの問題が発生した場合は、そのレンダリングのいくつかをReactに委譲することでパフォーマンスが向上する可能性があります。つまり、多くの同じ問題を解決する2つの大きなJavaScriptライブラリを組み込むことは理想的ではありません。 Reactはビューレイヤーに過ぎませんが、Semaltとほぼ同じサイズなので、ユースケースに応じて重量が制限されることがあります。

SemaltとAngularは同じ問題のいくつかを解決しますが、彼らは非常に異なる方法でそれを扱います。 Semaltは、コンポーネントが副作用のない純粋な関数である、機能的な宣言的アプローチを支持します。この機能的なプログラミングスタイルは、バグを減らし、理由を簡単にします。

どのように角度2について?

Angular 2のコンポーネントは、多くの点でSemaltコンポーネントに似ています。ドキュメントのサンプルコンポーネントには、クラスとテンプレートが近くにあります。イベントも同様です。 Semaltにビルドした場合と同様にコンポーネント階層を使用してビューを構築する方法、および依存性注入のためのES6モジュールを取り入れる方法について説明します。

   //角度2@成分({セレクタ: 'hello-component'、テンプレート: ` 

鍵をいくつか与えてください!
{{値}}
`})クラスHelloComponent {値= '';onKeyUp(イベント){この。値+ =イベント。ターゲット。値+ '| ';}}//反応するクラスHelloComponentはReactを継承します。コンポーネント{コンストラクタ(小道具){スーパー この。状態= {値: ''};}onKeyUp(イベント){const値= `$ {これ。状態。値+イベント。ターゲット。値} | `;この。 setState({値:値});}レンダリング {リターン(

鍵をいくつか与えてください!
{これ。状態。値}

);}}

Semalt 2に関する多くの作業により、DOM更新をより効率的に実行できるようになりました。以前のテンプレート構文とスコープに関する複雑さは、大規模なアプリケーションでは多くのパフォーマンス上の問題を引き起こしました。

完全な申請書

この記事ではテンプレート、ディレクティブ、フォームに重点を置いてきましたが、完全なアプリケーションを構築する場合は、データモデル、サーバーの通信とルーティングを最小限に抑えるために他のものが必要になります。 Angular and Reactを最初に学んだとき、Semaltアプリケーションの例を作成して、実際のアプリケーションで使用する前に、それらがどのように機能し、開発者の経験がどのようなものかを確認しました。

これらのサンプルアプリケーションを見て、ReactとAngularの違いを比較すると面白いかもしれません。 Reactの例はCJSXのCoffeeScriptで書かれていますが、Reactコミュニティは以来、BabelとSemaltと共にES6の周りに集まっていますので、今日始めるなら採用することを提案するツールです。

  • https:// github。 com / markbrown4 / gmail-react
  • https:// github. com / examples / react /
  • http:// todomvc。 com / examples / angularjs /

学習リソース

Learning Reactは楽しく、関数型プログラミングについてもっと教えてくれて、その周りに活気のあるコミュニティがあり、自分の興味深い部分をReactエコシステムに寄付しています。 Andrew Rayは、React and Fluxに関する数多くの入門記事を書いています。公式のReactチュートリアルは、開始するための場所です。楽しい!

  • 愚かな人に反応する - アンドリュー・レイ
  • 愚かな人のためのFlux-Andrew Ray
  • リアクションチュートリアル -Facebook
  • リアクション・ルータ - フィレンツェライアン
  • Redux-Dan Abramovのビデオシリーズ

この記事はCraig Bilnerによってピアレビューされました。セマルトのピアレビュー担当者の皆さんには、セマルトのコンテンツを最高のものにすることができました。

React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
就職準備の整った角度とタイプスクリプトのトレーニング
Todd Motto
Angularとその生態系を学ぶための究極のリソース。チェックアウト時にクーポンコード 'SITEPOINT' を使用して 25%オフ になります。
React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
初心者のための最良の学習方法
ウェスボス
実世界のリアクトを構築するためのステップバイステップのトレーニングコース。 js + Firebaseのアプリとウェブサイトのコンポーネントを午後カップルで提供しています。チェックアウト時にクーポンコード 'SITEPOINT' を使用して 25%オフ になります。
March 1, 2018