初投稿です。
とか書くとニコニコ動画大好きなのバレてしまいそうですが、嘘です。
今回はES2015でdefaultProps
とかpropTypes
の書き方の備忘録です。
ES2015でdefaultProps
とかpropTypes
ってどうやって書くのか最初わからず詰まってしまいました。
babelさんがstatic
を使って書いているの見てstatic
使えば良いのかと思っていたのですがコンソールでエラーが多発しました。
https://babeljs.io/blog/2015/06/07/react-on-es6-plus
class Video extends React.Component {
static defaultProps = {
autoPlay: false,
maxLoops: 10,
}
static propTypes = {
autoPlay: React.PropTypes.bool.isRequired,
maxLoops: React.PropTypes.number.isRequired,
posterFrameSrc: React.PropTypes.string.isRequired,
videoSrc: React.PropTypes.string.isRequired,
}
state = {
loopsRemaining: this.props.maxLoops,
}
}
思考錯誤の末、babel-preset-stage-0
を導入することにより無事static
でpropTypes
やdefaultProps
を書いても問題なく動作しました。
一応、簡単なサンプルを用意しました(かなり荒いですが)
https://github.com/takahiro-saeki/react-basic-todo/tree/props-test
##サンプルの簡単な説明
ディレクトリ構成は以下のようになっています。
.
├── README.md
├── assets
│ └── js
│ ├── common.js
│ └── component
│ └── content.jsx
├── package.json
├── template
│ ├── index.html
│ └── js
│ └── main.js
└── webpack.config.js
assets/js
ディレクトリのcommon.jsでReactDOM.render
しています。
assets/js/component
の中にコンポーネントが入っています。
import React from 'react';
export default class Content extends React.Component {
constructor(props) {
super(props)
this.state = {
name: this.props.name,
age: this.props.age,
hobby: this.props.hobby
}
}
static propTypes = {
name: React.PropTypes.string.isRequired,
age: React.PropTypes.number.isRequired,
hobby: React.PropTypes.string.isRequired
}
static defaultProps = {
name: 'hiro',
age: 24,
hobby: 'DanceDanceRevolution'
}
render() {
return (
<ul>
<li>{this.state.name}</li>
<li>{this.state.age}</li>
<li>{this.state.hobby}</li>
</ul>
)
}
}
##propTypes
について
propTypes
とは型の制約を付ける為に使用します。
今回の場合だと、name
とhobby
にはstring
を、ageにはnumber
を指定しています。
もしage
にstring
文字列が入った場合、表示はされますが、コンソールでエラーが吐き出されます。
##defaultProps
について
defaultProps
はその名の通りprops
のデフォルト値を指定することが出来ます。
constructor
内でstate
に対し、this.props.〜
と指定することによりprops
の値をthis.state.〜
で呼び出せるようにしています。
##コンポーネント単位で分割する
次にjs/common.js
を見てみると...
import React from 'react';
import ReactDOM from 'react-dom';
import Content from './component/content';
class Main extends React.Component {
render() {
return (
<section>
<Content name='hoge' age={30}/>
</section>
)
}
}
ReactDOM.render(
<Main />,
document.getElementById('app')
)
<Content name='hoge' age={30}/>
というような感じでdefaultProps
に指定したkey
, value
を上書きすることが来ます。
##まとめ
-
defaultProps
、propTypes
をstatic
で書くにはstage-0
が必要。 -
propTypes
は型を指定する。 -
defaultProps
は値のデフォルト値を設定する。
以上です。
良きreactライフを!ヽ(^o^)丿