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>
        )
    }
}
原文地址:https://www.cnblogs.com/CGWTQ/p/12097808.html