2021/8/17
メモ
React + Node.js
- Reactでは親コンポーネントから子コンポーネントに何かを伝えるときは、プロパティを介して情報を伝達する。
- 逆に子コンポーネントの変化を親コンポーネントに伝えるときは、イベントを利用する。
- 3-3のコードが実行できなかったが、イベントの処理とか諸々を勉強した方が良さそうなのでとりあえず先に進む。
state(状態)とprops(プロパティ)について
state(状態)
コンポーネントの状態を表す書き換え可能なデータの集まり
props(プロパティ)
外部からのコンポーネントへの窓口というべき役割
- プロパティは読み取り専用
- プロパティは親要素から設定されるもの
- 初期値と型の検証を行うことができる
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://unpkg.com/react@15/dist/react.min.js"></script> <script src="https://unpkg.com/react-dom@15/dist/react-dom.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.38/browser.min.js"></script> </head> <body> <div id="root"></div> <div id="info"></div> <script type="text/babel"> // 色選択コンポーネントの定義 class ColorBox extends React.Component { constructor (props) { super(props) // 状態の初期化 this.state = { index: 0, colors: ['red', 'blue', 'green', 'yellow', 'black'] } } // 描画 render () { // stateから値を取り出す const colors = this.state.colors const index = this.state.index // 現在の選択色 const cur = (index >= 0) ? colors[index] : '' // 各色ごとにspan要素を生成する const items = colors.map((c) => { // 選択色なら枠をつける let bs = '1px solid white' if (c == cur){ bs = '1px solid black' } // 色ごとのスタイルを設定 const cstyle = { color: c, border: bs } // 色をクリックした時の処理 const clickHandler = (e) => { const c = e.target.style.color const i = this.state.colors.indexOf(c) // 状態を更新する this.setState({index: i}) if(this.props.onColorChange){ this.props.onColorChange({color: c}) } } // span要素で色のタイルを返す return ( <span onClick={clickHandler} style={cstyle}>■</span> ) }) // 描画内容を返す return ( <div>{items}</div> ) } } // ReactでDOMを書き換える const colorHandler = (e) => { ReactDOM.render( <span>{e.color}</span>, document.getElementById('info') ) } const dom = <div> <ColorBox id='cb' onColorChange={colorHandler} /> </div> ReactDOM.render(dom, document.getElementById('root')) </script> </body> </html>
メモ
- mapメソッドを使うとある配列を元にして別の配列要素を生成することができる。
- JSXは別の部分でJSXにより生成したオブジェクトやその配列を埋め込むように指定できる。