今回はユーザーが入力した値を別のComponentにリアルタイムに渡すサンプルを作ってみたいと思います。
カラーチェッカーComponent
テキストボックスに色の名前を入力すると、ほぼリアルタイムに■の色が変化するComponentになります。Reactの公式ドキュメントの水の温度によって表示を変化させるサンプルを改変した物です。
サンプル
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>ColorChecker</title>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!-- Don't use this in production: -->
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
function ShowColor(props) {
return(
<p style={{color:props.color, fontSize:'20px'}}>■</p>
);
}
class ColorChecker extends React.Component {
constructor(props) {
super(props);
this.state = {color: ''};
this.handleChange = this.handleChange.bind(this);
}
handleChange(e) {
this.setState({color: e.target.value});
}
render() {
const color = this.state.color;
return (
<fieldset>
<legend>色名を入力してください:</legend>
<input
value={color}
onChange={this.handleChange}
placeholder="例:Red" />
<ShowColor color={color} />
</fieldset>
);
}
}
ReactDOM.render(
<ColorChecker />,
document.getElementById('root')
);
</script>
</body>
</html>
実行結果
解説
内包するComponentに値を渡す
ゆっくり処理を追うとわかると思いますが、動作的には難しいことはしていません。
<ColorChecker>
の中に<ShowColor>
Componentが存在しています。
ポイントはrender()
メソッドです。
render() {
const color = this.state.color;
return (
<fieldset>
<legend>色名を入力してください:</legend>
<input
value={color}
onChange={this.handleChange}
placeholder="例:Red" />
<ShowColor color={color} />
</fieldset>
);
}
このinput
タグに値を入力すると、
onChange
イベントが発生し、handleChange()
メソッドが呼ばれるhandleChange()
でStateが更新され、render()
メソッドが呼ばれる<ShowColor color={color} />
の箇所で、最新の値が<ShowColor>
Componentに渡される<ShowColor>
Componentの処理が実行される
という流れになります。
書籍
React入門 React・Reduxの導入からサーバサイドレンダリングによるUXの向上まで (NEXT ONE)
posted with amazlet at 18.12.24
穴井 宏幸 石井 直矢 柴田 和祈 三宮 肇
翔泳社
売り上げランキング: 139,067
翔泳社
売り上げランキング: 139,067
参考ページ
このブログを応援する
お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。
同じカテゴリの記事
- はじめてのReact #30 「CSSフレームワークを導入する」Material-UI テーマをカスタマイズ編
- はじめてのReact #29 「CSSフレームワークを導入する」Material-UI アイコンと文字スタイル編
- はじめてのReact #28 「CSSフレームワークを導入する」Material-UI グリッド編
- はじめてのReact #27 「CSSフレームワークを導入する」Material-UI インストール編
- はじめてのReact #26 「ルーティングに対応する」設定をJSONにまとめる編 react-router@v5
- はじめてのReact #25 「ルーティングに対応する」認証とリダイレクト編 react-router@v5
- はじめてのReact #24 「ルーティングに対応する」URLパラメーター編 react-router@v5
- はじめてのReact #23 「ルーティングに対応する」基本編 react-router@v5