認識React
5863 ワード
認識React
準備
babel-cli
Reactには2つの方法があります.は、jsx を通過する.は、js を通じて
jsxはもっと便利なようですが、バベルでコンパイルしなければなりません.
babelでReactをコンパイルするjsxには3つの方法があります.(babelの具体的な使い方については疑問が多いようです.後でまた振り回されます.) CLIツールコンパイル Node.js実行時コンパイル ブラウザ(クライアント)実行時コンパイル これはbabel-cliでリアルタイムでコンパイルするつもりです.便利です.
インストール
ツールの全体をインストールしました.
ps:私はここで前に言い間違えました.
ここにピットがあります.windowsシステムでは直接
babel-cliの
これ以外にも、絶対パスのプラグインの住所を書いてもいいです.
プラグインを単独でインストールした後、絶対パスアドレスを書かなくてもいいです.
React v 0.14 xを使用します.
準備
babel-cli
Reactには2つの方法があります.
jsxはもっと便利なようですが、バベルでコンパイルしなければなりません.
babelでReactをコンパイルするjsxには3つの方法があります.(babelの具体的な使い方については疑問が多いようです.後でまた振り回されます.)
インストール
ツールの全体をインストールしました.
$ [sudo] npm i -gd babel-cli
プラグインを単独でインストール:$ npm i -d babel-preset-react
使用ps:私はここで前に言い間違えました.
ここにピットがあります.windowsシステムでは直接
babel --presets react
ができますが、OS xではエラーが発生します.直接に絶対パス/usr/local/lib/node_modules/babel-preset-react
を指定します.babel-cliの
--presets
パラメータは、親レベルディレクトリにnode_module
の中のbabel-prest-xxx
プラグインを探しています.見つけられなかったら、現在のディレクトリパスに対してプラグインを探しています.これ以外にも、絶対パスのプラグインの住所を書いてもいいです.
プラグインを単独でインストールした後、絶対パスアドレスを書かなくてもいいです.
$ babel --presets react jsx --watch --out-dir build
毎回コマンドをノックしたくないなら、プロジェクトディレクトリ(babelコマンドを押すディレクトリ)に.babelrc
ファイルを新規作成できます.{
"presets": ["react"]
}
このようにコマンドをノックする時は--presets
パラメータを持たないでください.$ babel jsx --watch --out-dir build
jsx
はコンパイルが必要なフォルダであり、build
はコンパイル後に作成されたフォルダである.React v 0.14 xを使用します.
Document
ps: サイトの では、reactコアjsはラベルの に っています.これは にDOMをレンダリングする に タグの に できます.さもなくば、 のようにラベルの でノードにreactをレンダリングします.
コンポーネント
コンポーネントコンセプト
まず、Input
のコンポーネントをください.var Input = React.createClass({
render: function(){
return(
)
}
})
Reac.createClass
を して されたのがコンポーネントです.rander
returnのものをテンプレートと ぶことができます. コンポーネントは つのツリー である( ノードとサブノードがあり、つまり2つのトップノードが に してはいけない.reactは されない).Reactの では つのコンポーネントで されています. み わせも の の です.
コンポーネントのレンダリングReactDOM.render(
,
document.getElementById('JBody')
);
ReactDOM.render
メソッドを び してレンダリングし、 のパラメータはコンポーネントであり、 はコンポーネントを したコンテナである. に、 のパラメータはツリー 、すなわちトップノードのみをサポートする.
コンポーネントの2つの なオブジェクト
propsprops
は、コンポーネントテンプレートのデータオブジェクトである. には なデータが されています.つまり び し だけに が り てられています.その 、データの があれば、 テンプレートのレンダリングは われません.
propsの :var Input = React.createClass({
render: function(){
return(
// props
)
}
})
ReactDOM.render(
, // props
document.getElementById('JBody')
)
statestate
はprops
と である.state
は データオブジェクトであり、つまりいつでも り てが であり、その データの があればテンプレートの レンダリングが われる(ここでレンダリングすると、reactのvirtual DOMに する).
stateの :ここでリスト Items
を する.var Items = React.createClass({
getInitialState: function() {
return {
data: [12312,1231,45,51512312,2131]
}
},
render: function(){
return(
{this.state.data.map((value,i) => {
return - {value}
})}
)
}
})
getInitialState
は、state
の データを するために される.
コンポーネントのライフサイクル においてサーバからデータを し、this.setState
メソッドを び してstate
に を り てることもできる.this.setState
はその
の です.Input
コンポーネントを し、state
:var Input = React.createClass({
getInitialState: function() {
return {
who: ' '
}
},
change: function(e){
let target = e.target
this.setState({
who : target.value
})
},
render: function(){
// props
return(
{` ${this.state.who} `}
)
}
})
ReactDOM.render(
,
document.getElementById('JBody')
)
ここではイベントonChange
の び しが われ、イベントをトリガするとstate
が されます. システムに する : reactイベントシステム reactフォームイベント コンポーネントのドキュメントコンポーネントAPI コンポーネントライフサイクル コンポーネントの
reactの には つの なるコンポーネント の に する がないが、 はfluxの 、flux を している.しかし、コミュニティはこのプランがとてもいいとは わないようで、 の reduxがある.
に する
reactのコンポーネント の は であるが、コンポーネント は にないといえる.
の では、コンポーネントの は、データとコンポーネントのレンダリング が であるので、より にデータの として できる. なるコンポーネントのレンダリングを するコンポーネント・コンテナは、データの を で し、 コンポーネントのレンダリングを う.データとコンポーネントレンダリングの ができます.このコンセプトはContiner Components、Leveling Up With React:Continer Componentsです.
のいくつかのmv*
フレームワークでは、 コンポーネントは の インターフェースを っており、Aコンポーネントの でBコンポーネントとデータ ができますが、reactはこのようなインターフェースを っていません.したがって、 や などの ツールを りる があります.
そうです. たちはFluxやReduxなどを ツールとして うことができます. きなら、 で いてもいいです.AコンポーネントのデータがBコンポーネントのデータと するとき、Bコンポーネントの をダイヤルして、Bコンポーネントにデータを えてください.データはオペレータのシステムの で って、Bコンポーネントに られます.
シーン
えばログインします
つのページで、 つ の を したいコンポーネントがあれば、 が になります. つのコンポーネントがログインしたら、 の を する があるコンポーネントを するべきです.これで の が じました.
コンポーネントの とパッケージ
これはあまり くの がないです.コンポーネントの 、 は された です. があれば、 を つけてから します.しかし、これは くの が としてしまうかもしれません. れた パッケージはまず な とメンテナンスに けて、 に されます.
github:https://github.com/jincdream/jincdream.g...