
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>05_components_composing</title>
</head>
<body>
<div id="example"></div>
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/prop-types.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
class App extends React.Component {
state = {
todos: [
'A',
'B',
'C',
'D'
]
}
addTodo = (todo) => {
const {todos} = this.state
todos.unshift(todo)
this.setState({
todos
})
}
render () {
console.log('App render()')
const {todos} = this.state
return (
<div>
<h1>TODO LIST</h1>
<Add size={todos.length} addTodo={this.addTodo}/>
<List todos={todos}/>
</div>
)
}
}
class Add extends React.Component {
static propTypes = {
size: PropTypes.number.isRequired,
addTodo: PropTypes.func.isRequired
}
addTodo = () => {
const todo = this.refs.todo.value
this.props.addTodo(todo)
this.refs.todo.value = ''
}
render () {
const {size} = this.props
return (
<div>
<input type="text" ref="todo"/>
<button onClick={this.addTodo}>Add #{size}</button>
</div>
)
}
}
class List extends React.Component {
static propTypes = {
todos: PropTypes.array.isRequired
}
render () {
const {todos} = this.props
return (
<ul>
{
todos.map((todo, index) => {
return <li key={index}>{todo}</li>
})
}
</ul>
)
}
}
ReactDOM.render(<App/>, document.getElementById('example'))
</script>
</body>
</html>
工厂函数、构造函数

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="example1"></div>
<div id="example2"></div>
<script type="text/javascript" src="../js/react.development.js"></script>
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
function MyComponent() {
console.log('MyComponent', this)
return <h2>工厂函数组件(简单组件)</h2>
}
class MyComponent2 extends React.Component{
render () {
console.log('render()', this, this === MyComponent2, this instanceof MyComponent2)
return (
<div>
<h2>ES6类组件(复杂组件)</h2>
<input type="text" />
</div>
)
}
}
console.log(typeof MyComponent2)
ReactDOM.render(<MyComponent/>, document.getElementById('example1'))
ReactDOM.render(<MyComponent2/>, document.getElementById('example2'))
</script>
</body>
</html>