React-cdn引入js

147 阅读1分钟

React

1、cdn引入js

1.jpg

2、js

2.jpg

3、jsx

3.jpg

4、操作内容、属性、样式、事件

4.jpg

5、条件渲染

三元运算符 也可显示标签,一行可简写,不在标签外加括号

5.1.jpg

if-else 语句需要定义在外面

5.2.jpg

方法里也支持jsx写法

5.3.jpg

6、列表渲染

6.jpg

7、组件

自定义组件,有函数组件/类组件,利用props进行传参

7.jpg

8、state--操作组件内部数据

8.jpg

在新的版本中,state可以定义在constructor外,类似于data

9、todolist应用

1、获取构造数据里的值打印
react中的this对象需用bind绑定--改变this指向,可以直接打印this来看,
传参直接写在方法的括号内,this后面
四种写法,推荐第四种,定义方法时用箭头函数

9.1.1.jpg

image.png

image.png

推荐写法如下,带传参需再用箭头函数

image.png

2、响应式 --this.setState

image.png

完整应用

<!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>todolist应用</title>
    <script src="./lib/react.development.js"></script>
    <script src="./lib/react-dom.development.js"></script>
    <script src="./lib/babel.js"></script>
</head>
<style>
    .g-add {
        width: 300px;
    }

    .g-list {
        width: 350px;
        display: flex;
        justify-content: space-between;
        align-items: center;
    }

    .g-delate {
        width: 50px;
        height: 30px;
    }
</style>

<body>
    <div id="app">

    </div>

    <script type="text/babel">

        class Todolist extends React.Component {
            constructor() {
                super()
                this.state = {
                    inputValue: '',
                    list: [
                        { id: 1001, name: 'javascript高级编程', state: false },
                        { id: 1002, name: 'vue高级编程', state: false },
                    ]
                }

            }
            render() {
                return (
                    <div>
                        <h2>todolist应用</h2>
                        <input className='g-add' type="text" placeholder='请输入书名' value={this.state.inputValue} onChange={this.bindInputValue} />
                        <button onClick={this.bindAdd} onKeyup={this.bindAdd}>添加</button>
                        {
                            this.state.list.map((item, index) => (
                                <div className='g-list' key={item.id}>
                                    <input type="checkbox" onChange={() => { this.bindChecked(item.id) }
                                    } />
                                    <p>{item.id}-{item.name}</p>
                                    <button className='g-delate' onClick={() => this.bindDelete(index)}>删除</button>
                                    <p>{item.state ? '选中' : '未选中'}</p>
                                </div>
                            ))
                        }
                    </div>
                )
            }
            bindInputValue = (e) => {
                let inputValue = e.target.value
                this.setState({ inputValue })

            }
            bindAdd = () => {
                if (this.state.inputValue !== '') {
                    let list = this.state.list
                    list.push({
                        id: Math.floor(Math.random() * (9999 - 1000) + 1000),
                        name: this.state.inputValue,
                        state: false
                    })
                    this.setState({ list, inputValue: '' })
                } else {
                    alert('书名不能为空')
                    return
                }

            }
            bindDelete = (index) => {
                let list = this.state.list
                list.splice(index, 1)
                this.setState({ list })
            }
            bindChecked = (id) => {
                let list = this.state.list
                let item = list.find(item => item.id === id)
                item.state = !item.state
                this.setState({ list })
            }

        }
        ReactDOM.render(<Todolist />, document.getElementById('app'))  
    </script>
</body>

</html>