• 01-React基础语法(1)


    一、React 简介

      React 是一个很火的 js库 或 框架 (facebook

    二、React Vue 对比

      1.组件化方面

         React:由FaceBook前端官方团队进行维护和更新的(有背景,技术实力比较雄厚);

         Vue:起初由作者尤雨溪专门进行维护的,回来2.x 版本后尤雨溪主导的开源团队维护和更新;

      2.社区方面

         在社区方面,React由于诞生的较早,所以社区比较强大,一些常见的问题、坑、最优解决方案,文档、博客在社区中都是可以很方便就能找到的;

         Vue的社区现在也非常的成熟,找不到的也可以百度或谷歌

      3.移动App方面

         Vue,结合 Weex 这门技术,提供了 迁移到 移动端App开发的体验     

         React,结合 ReactNative,也提供了无缝迁移到 移动App的开发体验

         相对而言:普遍uniapp去写或微信小程序

      vue更官方化(约束)

      react更社区化(自由)

    三、原生语法

      1.导入 js 库

    <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js">

      2.创建页面元素

        //  语法:React.createElement(待创建的标签名,待创建的标签属性对象/null,子内容) const element = React.createElement('h1', {    title: 'this is h1 tag' }, 'helloword')

      3.创建容器渲染

        //  语法:ReactDOM.render(元素对象,监控范围标签对象) ReactDOM.render(element, document.querySelector('#app')) 

    四、JSX

      JSX语法创建元素

      1.导入 js

    <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js">
    // 需要 导入babel转义JSX
    <script src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script> 

      2.JSX创建页面元素

    <script type="text/babel">
    // 注意:type 类型
        
        const h1Element = <h1 title="this is h1 tag">hello,word</h1>
    </script>

       3.渲染页面

    ReactDOM.render(ulElement, document.querySelector('#app'))

    五、组件&Props

    注:使用 ES6 语法创建组件

      1.创建组件

    class Reg extends React.Component 
    { // 留心React.Component大小写
    
        // constructor根据情况写(举例:声明组件状态、接受组件参数等)
    
        // 渲染
        render() {
            return (
                <div>
                    <p>
                        用户名:
                        <input type="text" name="uname" />
                    </p>
                    <p>
                        密码:
                        <input type="password" name="pwd" />
                    </p>
                    <p>
                        <input type="submit" value="注册" />
                    </p>
                </div>
            )
        }
    }

      2.页面渲染

    ReactDOM.render(<Reg />, document.querySelector("#app"))

    六、组件传值

      1.创建组件

    class Modal extends React.Component
    {
    
        render() {
            
            return (
                <div>
                    <p>状态:{this.props.status} </p>
                    <p>提示信息:{this.props.msg} </p>
                </div>
            ) 
        }
    }

      2.渲染传值

    ReactDOM.render(
        <div>
            <Modal status="false" msg="hello" />
        </div>
    , document.querySelector("#app"))

    七、组件状态

       概念:react组件中的状态,相当于vue组件中的data模型数据

       函数组件:无状态组件

       类组件:有状态组件

      1.定义组件

    class Test extends React.Component
    {
        constructor(props)  // 调用test组件 接受数据
        {
            super(props)  // 通过super调用父构造函数,并传递给父
    
            // 声明状态
            this.state = {
                date: (new Date).getTime(),
                num: 666
            }
        }
    
        render() 
        {
            return (
                <div>
                    <h1>{this.state.date}</h1>
                    <h1>{this.state.num}</h1>
                </div>
            ) 
        }
    }

      2.渲染组件

    ReactDOM.render(<Test />, document.querySelector('#app'))

      3.更新模型方法

      API setState()

    class Test extends React.Component
    {
        constructor(props)
        {
            super(props)
    
            // 声明状态
            this.state = {
                num: 666
            }
        }
        // 使用箭头函数,解决 this 指向问题
        updateNumFn = () => {
            // 1. 获取
            let num = this.state.num + 1
            // 2. 更新
            this.setState({
                num
            })
        }
    
        render() 
        {
            return (
                <div>
                    <h1>{this.state.num}</h1>
                    <button onClick={this.updateNumFn}>更新</button>
                </div>
            )
        }
    }

    注:需要使用箭头函数解决 this 指向问题

    八、事件处理

      步骤1:定义方法(小驼峰)

      步骤2:声明事件,例如:onClick=函数名    (注:1-不加引号,2-传递参数加小括号)

      1.定义组件方法

    class Login extends React.Component
    {
        //定义事件
        clickFun1Fn()
        {
            alert(1)
        }
        render() 
        {
            // 脚下留心:input框别忘记 结束斜杠 
            return (
                <div>
                    {/* 添加点击方法 */}
                    <input type="submit" value="点击" onClick={this.clickFun2} />
                </div>
            );
        }
    }

    九、事件传参

      语法:

    on事件类型={e => this.函数名(实参1,..,实参n,e)} 
    on事件类型={this.函数名.bind(this, 实参1,..,参数n)}  bind改变this执行 推荐 

      案例

    class Test extends React.Component
    {
        delFn1()
        {
            alert(1);
        }
    
        delFn2(id)
        {
            console.log(id)
            console.log(this)
        }
    
        render() 
        {
            return (
                <div>
                    { /*不传参*/ } 
                    <button onClick={this.delFn1}>删除1</button>
                    { /*传参*/ }
                    <button onClick={(e) => this.delFn2(55,e)}>删除2</button>
                    <button onClick={this.delFn2.bind(this, 55)}>删除3</button>
                </div>
            )
        }
    }
  • 相关阅读:
    preexisting shared memory block (key 5432001, ID 2883585) is still in use
    软件测试活动中数据库使用场景
    细数一些环境原因发现的bug
    PAPI编译安装
    nvtop安装
    llvm clang源码编译安装
    MMCV源码编译
    TVM源码编译
    Googletest源码编译安装
    Pytorch源码编译安装
  • 原文地址:https://www.cnblogs.com/CGWTQ/p/12097808.html
Copyright © 2020-2023  润新知