react练习

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
    <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'
                ]
            }

            //向todos 中添加todo
            addTodo = (todo) => {
                // 得到状态数据todos
                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 propType = {
                size: PropTypes.number.isRequired,
                addTodo: PropTypes.func.isRequired
            }

            addTodo = () => {
                // 1.得到输入的todo
                const todo = this.refs.todo.value
                // 2.将todo添加到todos中
                this.props.addTodo(todo)
                //3.清除输入
                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>

</body>
</html>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值