ES 5機能のみを使用して反応コンポーネントを作成する
10138 ワード
このポストは、ちょうど「JavaScriptである」と反応する親しみやすいリマインダーです.ビルドステップなしで使うのも大丈夫です.小さなインタラクティブなコンポーネントを作成するのは大丈夫です.そして、あなたがしたくない場合は、ES 6 +を使用する必要はありません.
反応はすべてのコンポーネントのパンとバターであるCreateElementという関数を公開します.JSXは実際には
このタイプのコンポーネントのみを取る
これらのコンポーネントは、自分自身の内部状態を管理し、ライフサイクルメソッドを持つことができます.ここでは、ES 5で我々は使用できません
我々が世話をする必要がある最初のものは、遺産です.通常使用する
今私たちの新しい発見知識を使用すると、ビルドステップを設定せずにいくつかのコンポーネントを作成したり、ブラウザのサポートについてあまり心配しています.簡単なタイマーを行います.
人が最初に気がつかない1つのものは、要素の子供たちもパラメタであるということです.コンポーネント、文字列、オブジェクトまたは関数を渡すことができます.日の終わりに
何かお見せしましょう.
これはうまくいきません.これは、任意のサイトに埋め込むために良い古いスクリプトのタグと反応を使用できることを示しています.もう1つは、反応コンポーネントが関数呼び出しであることを示します.本当に、あなたは慎重に注意して足で自分の撮影を含む何かを行うことができます.
Todo List example
Timer example
React without a build step
React is just JavaScript
お読みありがとうございます.あなたがこの記事を役に立つならば、私の努力を支持したいです.buy me a coffee ☕ .
createElement関数のクイックリープ
反応はすべてのコンポーネントのパンとバターであるCreateElementという関数を公開します.JSXは実際には
React.createElement
呼び出し.このように見えます.React.createElement(
'tagName', // HTML tag name or a custom component
props, // HTML attributes, custom properties, events, etc...
children // a string or a list of components or almost anything
);
ステートレスコンポーネント
このタイプのコンポーネントのみを取る
props
を返します.彼らは自分の状態を管理し、ライフサイクルの方法を持っていない.彼らは他の情報源から来るデータを提示するのに最適です.ビルドステップなしでは以下のようになります.function Welcome(props) {
return React.createElement('div', null, 'Hello, ' + props.name);
}
ReactDOM.render(Welcome({ name: 'world' }), container);
クラスコンポーネント
これらのコンポーネントは、自分自身の内部状態を管理し、ライフサイクルメソッドを持つことができます.ここでは、ES 5で我々は使用できません
class
代わりに、コンポーネントを作成するキーワードは、その動作を模倣する必要があります.我々が世話をする必要がある最初のものは、遺産です.通常使用する
class MyComponent extends React.Component
それをする.我々は別の道を取るつもりです、私たちはprototype
からのコンポーネントのオブジェクトReact.Component
, 以下のように:function MyComponent(props) {
React.Component.constructor.call(this);
// ... code
}
MyComponent.prototype = Object.create(React.Component.prototype);
私たちのstatelessなコンポーネントからここで異なっていることは、我々が呼ぶということですReact.Component
カスタムコンポーネントのコンテキストを持つコンストラクタで、プロトタイプがReact.Component
. これにより、コンポーネントはLifeCycleメソッドとSetStateメソッドを使用できます.コード例
今私たちの新しい発見知識を使用すると、ビルドステップを設定せずにいくつかのコンポーネントを作成したり、ブラウザのサポートについてあまり心配しています.簡単なタイマーを行います.
var container = document.getElementById('app');
// h is short for hyperscript and it makes everything a little bit easier
var h = React.createElement;
// This is how we inherit methods like setState from React.Component
Timer.prototype = Object.create(React.Component.prototype);
function Timer(props) {
React.Component.constructor.call(this);
var self = this;
self.state = { seconds: 0 };
self.tick = function() {
self.setState(function(prevState) {
return { seconds: prevState.seconds + 1 };
});
};
self.componentDidMount = function() {
self.interval = setInterval(self.tick, 1000);
};
self.componentWillUnmount = function() {
clearInterval(self.interval);
};
self.render = function() {
return h('div', null, 'seconds: ', self.state.seconds);
}
}
ReactDOM.render(h(Timer), container);
ここに私が割り当てていることに注意してくださいthis
文脈self
使用を避ける変数bind
機能プロトタイプの方法.そして、私は一貫した酒のためにちょうどどこでもそれを使っていますself.tick
ここで私は失うthis
コンテキストを使用する際のコンテキストsetInterval
.最後のこと
人が最初に気がつかない1つのものは、要素の子供たちもパラメタであるということです.コンポーネント、文字列、オブジェクトまたは関数を渡すことができます.日の終わりに
children
は支柱です.何かお見せしましょう.
結論
これはうまくいきません.これは、任意のサイトに埋め込むために良い古いスクリプトのタグと反応を使用できることを示しています.もう1つは、反応コンポーネントが関数呼び出しであることを示します.本当に、あなたは慎重に注意して足で自分の撮影を含む何かを行うことができます.
その他の資源
Todo List example
Timer example
React without a build step
React is just JavaScript
お読みありがとうございます.あなたがこの記事を役に立つならば、私の努力を支持したいです.buy me a coffee ☕ .
Reference
この問題について(ES 5機能のみを使用して反応コンポーネントを作成する), 我々は、より多くの情報をここで見つけました https://dev.to/vonheikemen/creating-react-components-using-only-es5-features-52a1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol