React全家桶: React简介--hello react 案例--虚拟DOM与真实DOM-- jsx语法规则

简介: React全家桶: React简介--hello react 案例--虚拟DOM与真实DOM-- jsx语法规则

写在前面

在最近看了React之后,一直觉得学的懵懵然,虽然很多大佬的手写笔记,写的都很不错,但是我一直没有我想要的那种细无巨细,比如类式组件this指向问题的追根溯源,又比如三大实例属性简写的由来,总之我还是决定做一份事无巨细的笔记。


那就让我们开始吧!


react简介


讲解内容介绍

  • 本视频会讲解:

React基础

其他库的使用:

React-Router :做路由的库
PubSub、Redux :消息管理的库
Redux:集中式管理的库
Ant-Design:精美的UI组件库
复制代码


1.React是什么?

  • React是用于构建用户界面的JavaScript库。
    在页面上展示信息的步骤:
    构建步骤:
    1.发送请求获取数据
    2.处理数据(过滤、整理格式等)
    3.操作DOM呈现页面

React管理第三步、负责操作DOM对象。

  • 老师的对React定义:React是一个将数据渲染为HTML视图的开源JavaScript库。

2.React是谁开发的?

由Facebook开发、且开源。

1.起初由Facebook 的软件工程师Jordan Walke创建。

2.于2011年部署于Facebook的newsfeed。

3.随后在2012年部署于Instagram。

4.2013年5月宣布开源。


3.为什么要学习React?

1.原生JavaScript操作DOM繁琐、效率低(DOM-API操作UI)

2.使用JavaScript直接操作DOM,浏览器会进行大量的重绘重排。

3.原生JavaScript没有组件化编码方案,代码复用率低。

  • 部分概念解答


一、 DOM-API

注意:这里不知道DOM-API的,请看下面传送门

developer.mozilla.org/zh-CN/docs/…

bb2dd6de0568471e9d9db2fb8b87b3ea_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


二、 模块化、组件化

  • 后面会详细写到。


4.React的特点

1.采用组件化模式、声明式编码,提高开发效率及组件复用率。

2.在React Native中可以使用React语法进行移动端开发。(拿js做移动端开发)

3.使用虚拟DOM+优秀的Diffing算法,尽量减少与真实DOM的交互。

  • 部分概念解答


一、命令式编码、声明式编码

传送门:

www.csdn.net/tags/NtTaUg…

命令式编程:

命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。 比如:如果你想在一个数字集合 collection(变量名) 中筛选大于 5 的数字,你需要这样告诉计算机:

第一步,创建一个存储结果的集合变量 results

第二步,遍历这个数字集合collection

第三步:一个一个地判断每个数字是不是大于 5,如果是就将这个数字添加到结果集合变量 results

声明式编程:

声明式编程是以数据结构的形式来表达程序执行的逻辑。它的主要思想是告诉计算机应该做什么,但不指定具体要怎么做


二、虚拟DOM、Diffing算法

官网传送门

虚拟DOM

zh-hans.reactjs.org/docs/faq-in…

4fa5a4cda3bb405581bae023db4530c7_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


Diffing算法

zh-hans.reactjs.org/docs/reconc…

68de59052b4044d7baa2ea1432bd978a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


5.学习React之前你要掌握的JavaScript基础知识

判断this的指向

class(类)

ES6语法规范

npm包管理器

原型、原型链

数组常用方法

模块化


hello react 案例

版本问题

旧版本:讲解16.8


旧版本中4大依赖包

  1. babel.min.js
  • ES6 转换 ES5

例如:模块化书写import

  • jsx 转换 js
  1. react.development.js

react的核心库

  1. react-dom.development.js

react的扩展库:react帮忙操作dom


书写hello react 案例

这里看视频很容易理解,由于不是项目,我就不一步一步的写书写过程了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hello_react</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 */ 
    //1.创建虚拟DOM
     const VDOM =
         // 创建虚拟DOM
        <h1>Hello,React</h1> /* 此处一定不要写引号,因为不是字符串 */ 
        //2.渲染虚拟DOM到页面
         ReactDOM.render(VDOM,document.getElementById('test')) /* 调用render这个API  */ 
    </script>
</body>
</html>
复制代码


  • 实现效果

e2ce435093ed4971a409574c034ee3eb_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • type="text/babel"

这里表示script标签中书写的不是js而是jsx。

  • 一些警告

1.需要添加网站图标

0502e4798b8241b9abc921f332e96037_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


2.实际开发中并不会这样使用

1d33c4324b2541d296cbaf4f4f409073_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


3.下载react工具

4dabb4fccb5a47bd83996e1ce75e907c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


虚拟DOM的两种创建方式

1.使用React.createElement这个API来书写虚拟DOM

注意:不用引入babel库

官网:传送门

zh-hans.reactjs.org/docs/react-…


2.使用jsx语法

官网:传送门

zh-hans.reactjs.org/docs/react-…

jsx:就是为了更加简单方便的创建虚拟dom。并且更加具有层叠性。


虚拟DOM与真实DOM

虚拟DOM

关于虚拟DOM:

1.本质是Object类型的对象(一般对象)

2.虚拟DOM比较“轻”,真实DOM比较“重”,因为虚拟DOM是React内部在用,无需真实DOM上那么多的属性。

3.虚拟DOM最终会被React转化为真实DOM,呈现在页面上。


真实DOM

console.log('真实DOM',TDOM); 这里得使用debugger。这样可以防止操作台直接输出标签。

66a676271f6e48af8575132e3b278052_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


jsx语法规则

1. 全称:  JavaScript XML

  • XML早期用于存储和传输数据
<student>
        <name>Tom</name>
        <age>19</age>
</student>
复制代码


  • JSON

有2个常用方法 JSON.stringify 将对象转换为 JSON。JSON.parse 将 JSON 转换回对象。

zh.javascript.info/json#jsonst…


  • jsx语法规则:

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

2.标签中混入JS表达式时要用{}。

3、JSX和html的标签属性的区别

HTML标签属性 JSX 原因
for htmlFor for在JS中为for循环关键字
class className class在JS中为声明类关键字
style 需使用JS对象(使用双花括号-- {{}} ) 最外面的{}代表这里要书写js表达式、里面的{}表示这里书写的是一个对象。


例如:

<span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span>
复制代码


4.只有一个根标签

5.标签必须闭合

6.标签首字母

(1).若小写字母开头,则将该标签转为html中同名元素,若html中无该标签对应的同名元素,则报错。
(2).若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错。
复制代码


JSX小练习

遍历

1.直接遍历数组,会缺失li等等结构。

<script type="text/babel" >
        //模拟一些数据
        const data = ['Angular','React','Vue']
        //1.创建虚拟DOM
        const VDOM = (
                <div>
                        <h1>前端js框架列表</h1>
                        <ul>
                                {data}
                        </ul>
                </div>
        )
        //2.渲染虚拟DOM到页面
        ReactDOM.render(VDOM,document.getElementById('test'))
</script>
复制代码


a38012ea8efe48cfb0a5aadceb774122_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  1. 遍历对象?
<script type="text/babel" >
        //模拟一些数据
        const data = {1:'Angular',2:'React',3:'Vue'}
        //1.创建虚拟DOM
        const VDOM = (
                <div>
                        <h1>前端js框架列表</h1>
                        <ul>
                                {data}
                        </ul>
                </div>
        )
        //2.渲染虚拟DOM到页面
        ReactDOM.render(VDOM,document.getElementById('test'))
</script>
复制代码


12b6bed114854f45af681168f007dbc0_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  1. 使用for循环?

直接报错!

总结:
一定注意区分:【js语句(代码)】与【js表达式】
一、表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方
        下面这些都是表达式:
                (1). a
                (2). a+b
                (3). demo(1)
                (4). arr.map() 
                (5). function test () {}
二、语句(代码):
      下面这些都是语句(代码):
                                    (1).if(){}
                                    (2).for(){}
                                    (3).switch(){case:xxxx}
复制代码


4. 使用map遍历

  • 代码
<ul>
        {
                data.map((item,index)=>{
                        return <li key={index}>{item}</li>
                })
        }
</ul>
复制代码


  • 虚拟DOM的唯一标示key

暂时使用map遍历的index索引值。这也可以使用时间戳、随机数。



目录
相关文章
|
3月前
|
JavaScript 前端开发 算法
React技术栈-虚拟DOM和DOM diff算法
这篇文章介绍了React技术栈中的虚拟DOM和DOM diff算法,并通过一个实际案例展示了如何使用React组件和状态管理来实现动态更新UI。
46 2
|
2月前
|
JavaScript 前端开发 算法
真实DOM和虚拟DOM有哪些区别?
本文介绍了真实DOM和虚拟DOM的概念、使用方式、优势、劣势、使用场景、影响因素、开发效率和性能对比。真实DOM是浏览器提供的原生接口,直接操作简单直观,但频繁操作会导致性能损耗。虚拟DOM是真实DOM的抽象表示,通过比较差异减少DOM操作,适用于大规模数据变更和复杂交互的页面。开发者应根据具体需求选择合适的DOM操作方式,以提高页面性能和开发效率。
104 1
真实DOM和虚拟DOM有哪些区别?
|
3月前
|
JavaScript 前端开发
react学习(3)创建虚拟dom的两种方式
react学习(3)创建虚拟dom的两种方式
172 67
|
2月前
|
JavaScript 前端开发 算法
React 虚拟 DOM 深度解析
【10月更文挑战第5天】本文深入解析了 React 虚拟 DOM 的工作原理,包括其基础概念、优点与缺点,以及 Diff 算法的关键点。同时,分享了常见问题及解决方法,并介绍了作者在代码/项目上的成就和经验,如大型电商平台的前端重构和开源贡献。
65 3
|
3月前
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
36 3
|
3月前
|
JavaScript 前端开发
react字符串转为dom标签,类似于Vue中的v-html
本文介绍了在React中将字符串转换为DOM标签的方法,类似于Vue中的`v-html`指令,通过使用`dangerouslySetInnerHTML`属性实现。
109 0
react字符串转为dom标签,类似于Vue中的v-html
|
1月前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
77 9
|
2月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
26天前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
100 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
1月前
|
前端开发 JavaScript 开发者
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
33 1
下一篇
DataWorks