React 基础

1. js与jsx创建虚拟DOM

1> 使用jsx创建虚拟DOM

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset = "UTF-8">
    <title>1_使用jsx创建虚拟DOM</title>
</head>
<body>
<!-- 准备好一个“容器” -->
<div id = "test"></div>

<!-- 引入react核心库 -->
<script type="text/javascript" src="../js/react.development.js"></script>
<!-- 引入react-dom 用于支持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,因为用的是jsx,由babel转译*/
// 1.创建虚拟DOM
    const VDOM = <h1 id="title"><span>Hello,React</span></h1> /* 此处不要写引号,因为是jsx,与js不同*/
// 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM,document.getElementById('test'))
</script>

</body>
</html>

2> 使用js创建虚拟DOM

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset = "UTF-8">
    <title>2_使用js创建虚拟DOM</title>
</head>
<body>
<!-- 准备好一个“容器” -->
<div id = "test"></div>

<!-- 引入react核心库 -->
<script type="text/javascript" src="../js/react.development.js"></script>
<!-- 引入react-dom 用于支持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/javascript">   

//1.创建虚拟DOM 
// const VDOM = React.createElement('标签名','标签属性','标签内容') 
    const VDOM = (React.createElement('h1',{id:'title'},'Hello,React'))
//2.渲染虚拟DOM到页面 
    ReactDOM.render(VDOM,document.getElementById('test'))
</script>

</body>
</html>

3> 两者的差异
在脚本标签处,jsx使用的是<script type="text/babel">,因为要使用babel转译。
在创建虚拟DOM时,js
const VDOM = (React.createElement('h1',{id:'title'},'Hello,React'))
而jsx简化了许多
const VDOM = <h1 id="title"><span>Hello,React</span></h1>

2.虚拟DOM与真实DOM

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content="width=device-width, initial-scale=1.0">
    <title>3_虚拟DOM与真实DOM</title>
</head>
<body>
<!-- 准备好一个“容器” -->
<div id = "test"></div>
<div id = "demo"></div>

<!-- 引入react核心库 -->
<script type="text/javascript" src="../js/react.development.js"></script>
<!-- 引入react-dom 用于支持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,因为用的是jsx,由babel转译*/
// 1.创建虚拟DOM
    const VDOM = 
    (<h1>
        <span>Hello,React</span>
            </h1>) /* 此处不要写引号,因为是jsx,与js不同*/
// 2.渲染虚拟DOM到页面
    ReactDOM.render(VDOM,document.getElementById('test'))

    const TDOM = document.getElementById('demo')

    console.log('虚拟DOM',VDOM);
    console.log('真实DOM',TDOM);

    debugger;
    console.log(typeof VDOM);
    console.log(VDOM instanceof Object);

</script>

</body>
</html>

在这里插入图片描述
关于虚拟DOM:

        1.本质是Object类型的对象(一般对象)
        2.虚拟DOM比较“轻”,真实DOM比较“重”,因为虚拟DOM是React内部在用,无需真实DOM上那么多的属性。
        3.虚拟DOM最终会被React转化为真实DOM,呈现在页面上。

3. jsx语法规则

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width= , initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>jsx语法规则</title>
    <style>
        .title{
            background-color: orange;
            width: 200px;
        } 
    </style>
</head>
<body>
    <!-- 准备好一个“容器” -->
<div id = "test"></div>

<!-- 引入react核心库 -->
<script type="text/javascript" src="../js/react.development.js"></script>
<!-- 引入react-dom 用于支持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,因为用的是jsx,由babel转译*/
const myId = 'aTgUiGu'
const myData = 'HeLlo,rEaCt'

// 1. 创建虚拟DOM
const VDOM = (
    <div>
    <h2 className="title" id={myId.toLowerCase()}>
    <span style={{color:"white" ,fontSize:'40px'}}>{myData.toLocaleLowerCase()}</span>
    </h2>
    <h2 className="title" id={myId.toUpperCase()}>
    <span style={{color:"white" ,fontSize:'40px'}}>{myData.toLocaleLowerCase()}</span>
    </h2>
    <input type="text"/> 
    </div>
)

// 2.渲染虚拟DOM到页面
ReactDOM.render(VDOM,document.getElementById('test'))


</script>

</body>
</html>

jsx语法规则:

    1.定义虚拟DOM时,不要写引号。
    2.标签中混入JS表达式时要使用{}。
    3.样式的类名指定不要用class,要用className。
    4.内联样式,要用style={{key:value}}的形式去写。
    5.只有一个根标签。
    6.标签必须闭合。
    7.标签首字母
        1)若小写字母开头,则将该标签转为HTML中的同名元素,如`<span>,<h1>`等。若HTML中无该标签对应等同名元素,则报错。
        2)若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错。

4.JS语句与JS表达式的区别

一定注意区分:【JS语句(代码)与【JS表达式】】

        1.表达式:一个表达式会产生一个值,可以放在任何一个需要值到地方 
            下面这些都是表达式: 
            (1)a 
            (2)a+b 
            (3)demo(1) 
            (4)arr.map(1) 
            (5)function test(){} 
        2.语句(代码) 
            下面这些都是语句(代码) 
             (1)if(){} 
            (2)for(){} 
            (3)switch(){case:xxxx} 
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <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 用于支持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">
        
        // 模拟一些数据 
        const data = ['Angular','React','Vue'] 

        //1.创建虚拟DOM 
        const VDOM = (
        <div>
            <h1>前端js技术框架</h1>
            <ul>
                { 
                    data.map((item,index) => { 
                        return<li key={index}>{item}</li>
                }) 
                }
            </ul>
        </div>
        )
        
        // 2.渲染虚拟DOM到页面 
        ReactDOM.render(VDOM,document.getElementById('test'))
    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值