React学习01-React入门

React 简介

简介

官网

介绍

  • 用于动态构建用户界面的js库(只关注于视图)
  • 由Facebook开源

特点

  1. 声明式编码
  2. 组件化编码
  3. React Native 编写原生应用
  4. 高效:DOM Diffing算法,最小化页面重绘

Hello React 案例

引入js库

  1. react.development.js:React核心库
  2. react-dom.development.js:React操作DOM的扩展库
  3. babel.min.js:解析JSX转为JS代码的库

完整代码

<!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>Hello React</title>
</head>
<body>
    <div id="test"></div>

    <!-- 引入 React 核心库 -->
    <script type="text/javascript" src="./js/react.development.js"></script>

    <!-- 引入 react-dom  必须在核心库后引入 -->
    <script type="text/javascript" src="./js/react-dom.development.js"></script>

    <!-- 引入babel 将jsx转为js -->
    <script type="text/javascript" src="./js/babel.min.js"></script>

    <script type="text/babel"> /* 此处必须为babel */

        // 1.创建虚拟DOM
        const VDOM = <h1>Hello React</h1> /*此处一定不要加引号,因为不是字符串*/

        // 2.渲染DOM
        ReactDOM.render(VDOM, document.getElementById('test'))
    </script>

</body>
</html>

效果展示

image-20220212160103738

虚拟DOM与真实DOM

虚拟DOM

虚拟DOM本质就是js中的一个Object类型的对象(俗称一般对象),是React内部在用,无需太多属性。

console.log('虚拟DOM', VDOM)
console.log(typeof VDOM)
console.log(VDOM instanceof Object)

image-20220212191213683

真实DOM

真实DOM包含众多属性,虚拟DOM最终会被React转化为真实DOM,呈现在页面上。

const TDOM = document.getElementById('test')
console.log('真实DOM', TDOM)
debugger;

image-20220212191714751

虚拟DOM的两种创建方式

  1. 使用jsx创建虚拟DOM(jsx的语法糖)

    const VDOM = <h1 id="title">Hello React</h1>
    ReactDOM.render(VDOM, document.getElementById('test'))
    

    嵌套标签

    const VDOM = (
        <h1 id="title">
            <span>Hello React</span>
        </h1>
    )
    ReactDOM.render(VDOM, document.getElementById('test'))
    
  2. 使用js创建虚拟DOM(不推荐)

    const VDOM = React.createElement('h1', {id:'title', class:'t'}, 'Hello React')
    ReactDOM.render(VDOM, document.getElementById('test'))
    

    嵌套标签

    const VDOM = React.createElement('h1', {id:'title', class:'t'}, React.createElement('span', {}, 'Hello React'))
    ReactDOM.render(VDOM, document.getElementById('test'))
    

JSX语法规则

JSX

JSX全称JavaScript XML,是React定义的一种类似于XML的JS扩展语法,其本质是React.createElement(component, props, ...children)方法的语法糖。

存储和传输数据:

XML

<student>
    <name>Morales</name>
    <age>22</age>
</student>

JSON
JS内置JSON对象,JSON.parse()和JSON.stringify()

"{"name":"Morales","age":22}"

JSX的作用:用来简化创建虚拟DOM

  1. 写法:var ele = <h1>Hello JSX</h1>
  2. 既不是字符串也不是HTML/XML标签
  3. 最终产生JS对象

语法规则

  1. 定义虚拟DOM时,不要写引号;

    const VDOM = <h1>Hello React</h1>
    
  2. 标签中混入JS表达式时要用{}

    const myId = 'morales'
    const myData = 'Hello REact'
    const VDOM = (
        <h2 id={myId}>
            <span>{myData.toLowerCase()}</span>
        </h2>
    )
    

    image-20220212194154463

  3. 样式的类名指定不要用classclassES6定义的关键字),要用className

    .title {
        background-color: aqua;
        width: 500px;
    }
    
    const VDOM = (
        <h2 id={myId} className="title">
            <span>{myData.toLowerCase()}</span>
        </h2>
    )
    

    image-20220212194048130

  4. 内联样式,要用style={{key:value}}的形式写;

    <span style={{color:'orange', fontSize:'50px'}}>{myData.toLowerCase()}</span>
    

    image-20220212195047562

  5. 虚拟DOM必须只能有一个根标签;

    const VDOM = (
        <div>
            <h2 id={myId} className="title">
                <span style={{color:'orange', fontSize:'50px'}}>{myData.toLowerCase()}</span>
            </h2>
            <h2 id={myId.toUpperCase()} className="title">
                <span style={{color:'orange', fontSize:'50px'}}>{myData.toLowerCase()}</span>
            </h2>
        </div>
    )
    
  6. 标签必须闭合;

    <input type="text" />
    
  7. 标签首字母:

    1. 若小写字母开头,则将该标签转为html中同名标签,若html无同名标签,则报错;
      image-20220212200550241
    2. 若大写字母开头,则React将渲染对应的组件,若组件未定义,则报错。
      image-20220212200738415

JSX练习

效果

image-20220212203558145

完整代码

<!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>JSX练习</title>
</head>
<body>
    <div id="test"></div>

    <!-- 引入 React 核心库 -->
    <script type="text/javascript" src="./js/react.development.js"></script>

    <!-- 引入 react-dom -->
    <script type="text/javascript" src="./js/react-dom.development.js"></script>

    <!-- 引入babel 将jsx转为js -->
    <script type="text/javascript" src="./js/babel.min.js"></script>

    <script type="text/babel"> /* 此处必须为babel */

        // 模拟数据
        const data = ['Angular', 'React', 'Vue']

        // 1.创建虚拟DOM
        const VDOM = (
            <div>
                <h1>前端js框架列表</h1>
                <ul>
                    { // 此处仅可以写js表达式
                        
                        /*此写法以后可能会产生严重问题,入门阶段为方便学习暂时使用此写法*/
                        data.map((item,index)=>{
                            return <li key={index}>{item}</li>
                        })
                    }
                </ul>
            </div>
        )
        // 2.渲染虚拟DOM到页面
        ReactDOM.render(VDOM, document.getElementById('test'))

    </script>

</body>
</html>

image-20220212203014878

模块与组件

模块

模块是向外提供特定功能的js程序,一般就是一个js文件

随着业务逻辑增加,代码越来越多且复杂,因此使用模块

作用:复用js,简化js的编写,提高js运行效率

组件

组件是用来实现局部功能效果的代码和资源的集合(html/css/js/image等)

一个界面的功能更复杂时用到组件

作用:复用编码,简化项目编码,提高运行效率

模块化

当应用的js都以模块来编写时,这个应用就是一个模块化的应用

组件化

当应用是以多组件的方式实现时,这个应用就是一个组件化的应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值