2017年8月11日
目次
React.jsとはFacebook謹製のjsフレームワークです。
似たようなjsフレームワークにangular.jsがありますが、htmlを拡張していくのがangularでjs自体を拡張していくのが私の印象でした。(angular2はType.scriptでないといけないのでなるべくピュアなES6を勉強す流には向いているのか?)加えてReact.jsはjsの関数型機能をベースにつくられています。そういう意味ではReactを単なるビューを司るフレームワークという一般的な紹介には疑問を感じています。今回はこのReactの基本的な部分を紹介します。
コンポーネント(component)とは日本語にすると構成要素とかという意味になります。
要するに部品という意味です。イメージ的には、よくあるheaderやfooterの共通化のようなものです。
このコンポーネントには主に2種類あります。
なんで2種類あるのというお話ですが、functional componet はstateを保持できません。逆に class componentは state を保持することができるという違いがあります。
関数でコンポーネントを作成するのがfunctional componet です。
下記のような形になります。
function Hello() {
return(
<div>
こんにちは
</div>
)
}
クラスを宣言してReact.Componentを継承してコンポーネントを作成します。
class Hello extends React.Component {
render() {
return (
<div>
こんにちは
</div>
)
}
}
変数に格納したhtmlはReactDOM.reder内部でエスケープされてしまうので下記のようにする必要があります。
const textHtml = {__html:'<h2>test</h2>'};
<span dangerouslySetInnerHTML = { textHtml } />
propsとはコンポーネントに値を渡すときに利用されるものです。
上記した functional componet を利用して書くと下記のようになります。
ReactDOM.render内部でHelloコンポーネントにpropsを渡しています。
propsはデフォルトの値を与えたり必須チェックを行うこともできます。
function Hello(props) {
return(
<div>
こんにちは{props.name}
</div>
)
}
---
ReactDOM.render(
<Hello name="名前" />, document.getElementById('root'));
registerServiceWorker();
---
Hello.propTypes = {
name: React.PropTypes.string.isRequired
}
---
Hello.defaultProps = {
name: 'デフォルト'
}
stateとはclassコンポーネントの中で保持する値のことを言います。
constructorを宣言しその中で値を保持して利用します。
constructor() {
super();
this.state = {
name: 'ステート'
};
}