精進メモ
React + Node.js本
- Virtual DOMによって差分のみの変更になるのでReactは早く動作する
<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>
<script type="text/babel">
setInterval(() => {
const d = new Date()
const [hour, min, sec] = [
d.getHours(),
d.getMinutes(),
d.getSeconds()
]
const z2 = (v) => {
const s = "00" + v
return s.substr(s.length - 2, 2)
}
const elem = (<div>
{z2(hour)}:{z2(min)}:{z2(sec)}
</div>);
ReactDOM.render(elem,
document.getElementById("root"))
}, 1000);
</script>
</body>
</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>
<script type="text/babel">
const dom = <div>
<PhotoText image="pic1" label="南国の浜辺でゆったり" />
<PhotoText image="pic2" label="南国の海は開放的" />
<PhotoText image="pic3" label="海、海、海、青い海" />
</div>
ReactDOM.render(dom, document.getElementById('root'))
function PhotoText (props) {
const url = "img/" + props.image + ".jpeg"
const label = props.label
const boxStyle = {
border: "1px solid silver",
margin: "8px",
padding: "4px"
}
return <div style={boxStyle}>
<img src={url} width="128"/>
<span> {label} </span>
</div>
}
</script>
</body>
</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>
<script type="text/babel">
class Greeting extends React.Component {
render() {
return <h1>{this.props.type}</h1>
}
}
const dom = <div>
<Greeting type="Hello!" />
<Greeting type="Good morning!" />
</div>
ReactDOM.render(dom, document.getElementById('root'))
</script>
</body>
</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>
<script type="text/babel">
const TitleParts = (props) => (
<div style={{backgroundColor: 'red', color: 'white'}}>
<h3>{props.title}</h3>
</div>
)
const ContentParts = (props) => (
<div style={{border: '1px solid blue', margin: 15}}>
<div>あらすじ: {props.body}</div>
</div>
)
const Book = (props) => (
<div>
<TitleParts title={props.title} />
<ContentParts body={props.body} />
</div>
)
ReactDOM.render(
(<div>
<Book title='三国志' body='昔の中国の話'/>
<Book title='民数記' body='昔のイスラエルの話 '/>
<Book title='西遊記' body='猿が活躍する話' />
</div>),
document.getElementById('root')
)
</script>
</body>
</html>