一、react简介

news2025/2/27 21:07:31

目标

  1. 理解react这个框架在前端开发中的地位
  2. 理解react诞生的原因和意义(react是一个用于快速构建前端视图的javaScript库)
  3. 理解什么是虚拟dom、原生js模拟出虚拟dom的表示,模拟出创建虚拟dom的方法,模拟出虚拟dom转换成真实dom的方法。
  4. 认识react中虚拟dom的表示,创建虚拟dom的方法,如何把虚拟dom渲染为真实dom。
  5. 什么是jsx,为什么要用jsx,jsx的语法细节什么怎么样的。
  6. 搭建react开发环境,并且使用react的方式去构建简单视图。

知识点

  1. react由facebook公司推出,因为该公司不满足于市面上现有的前端框架,他们认为MVC只会让前端越来越复杂,因此react就诞生了,react只关注与视图层,官方对react的定位是:一个快速构建前端视图的javaScript库。

  2. 虚拟dom是一个用于表示真实dom节点的javaScript对象。

假设有一个html标签如下:

<div id="box" class="box">hello world</div>

那么其真实dom的表示方法为

var oBox = document.getElementById('box');
//  oBox就是真实dom节点,其本质也是一个对象,只是该对象有很多的属性,操作起来是昂贵的。

其虚拟dom的表示方法为

var vBox = {
    tagName: 'div',
    props: {
        id: 'box',
        class: 'box'
    },
    children: ['hello world']
}
// vBox其实就是虚拟dom,是我们用原生的Object对象去描述一个真实dom节点的方式,该对象只有标签的一些关键属性。

  1. 封装一个可以生成虚拟dom的方法,可参考如下写法
// 生成虚拟dom
function createVdom(tagName, props, children){
    const VDom = {
        tagName,
        props,
        children
    }
    return VDom;
}

  1. 封装一个转换虚拟dom为真实dom的方法,课参考如下:
 // 把虚拟dom转换成真实dom

 function creatRdom(vDom){
    const { tagName, props, children } = vDom;
    // 创建出真实dom节点
    const rDom = document.createElement(tagName);
    // 给节点添加属性
    if(props){
        Object.keys(props).forEach(item => {
            rDom.setAttribute(item, props[item]);
        })
    }
    // 遍历children
    children.forEach(item => {
        if(typeof item === 'string'){
            const text = document.createTextNode(item);
            rDom.appendChild(text);
        }else{
            rDom.appendChild(creatRdom(item))
        }
    });
    return rDom;
 }

  1. 使用create-react-app搭建react开发环境,并查看react中如何表示虚拟dom。react中表示虚拟dom的形式如下:

  1. React.createElement的书写方式太复杂所以引入jsx语法,jsx语法可以很好的表示虚拟dom,但是jsx毕竟不是合法的js语言,所以jsx语法最后都会被babel转换成合法js语法。

  1. react中引入静态资源(css、图片),其实是webpack使用对应的loader加载了资源,并进行了打包。

  2. jsx的语法规则为遇到<则以虚拟dom的方式解析,遇到{则以js的方式解析。其中{}中应该出现标准js的语法(有值的表达式),其中的值可以是 数字、字符串、null、布尔、undefined 或者react元素(虚拟dom),如果是数组的话,则会自动的把数组中的元素展开。

  3. React.createElement这个方法的三个参数

React.createElement(param1,param2,param3)
param1 string | React组件
param2 Object 组件上的属性
param3 Array 组件的子元素

  1. ReactDOM.render这个方法的三个参数
ReactDOM.render(param1, param2, param3)
param1 Object 组件
param2 Dom 要挂载的dom节点
param3 Function 真实dom结构渲染成功后的回调函数

授课思路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是甘特图?什么是项目管理?

数字化与信息化早已成为现今人们工作和生活中不可缺少的一部分。尤其是随着科学技术的进步&#xff0c;人们对数字化的期待也越来也高。作为项目管理中常备的工具&#xff0c;甘特图已经成为不少业内人士中常备的“神器”了。然而依旧有人搞不清甘特图与项目管理区别究竟在哪里…

Revit中创建基于线的砌体墙及【快速砌体排砖】

​  墙可以更改内部结构和材质&#xff0c;但是很难画出砌块样式形成的墙体&#xff0c;我们可以用其他方式画出砌体排砖墙么?这里我们用基于线的常规模型做砌体排砖墙。在开始我们需要做两个族&#xff0c;作为砌体排砖墙的基本单位&#xff0c;也就是一个单独的砌体块。 一…

多亏了这份大佬整理的Java进阶笔记,让我斩获7个offer

移动互联网时代&#xff0c;IT 系统变得愈加复杂&#xff0c;对我们程序员的要求也是越来越高&#xff0c;技术不断更新&#xff0c;我们还不能停止学习&#xff0c;停下来了就会被打上一个‘不合格的程序员’的标签&#xff0c;如何成为一位「不那么差」的程序员&#xff1f; …

java.io.IOException: FIS_AUTH_ERROR in Android Firebase

项目里更换完google-services.json文件后&#xff0c;获取 firebase token 时&#xff0c;显示报错&#xff1a; E/FirebaseInstanceId: Topic sync or token retrieval failed on hard failure exceptions: FIS_AUTH_ERROR. Wont retry the operation.D/AndroidRuntime: Sh…

测试行业3年经验,从大厂裸辞后,面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生

测试员可以先在大厂镀金&#xff0c;以后去中小厂毫无压力&#xff0c;基本不会被卡&#xff0c;事实果真如此吗&#xff1f;但是在我身上却是给了我很大一巴掌... 所谓大厂镀金只是不卡简历而已&#xff0c;如果面试答得稀烂&#xff0c;人家根本不会要你。况且要不是大厂出来…

精品基于ssm的足球联赛管理系统的设计与实现vue

《基于ssm的足球联赛管理系统的设计与实现》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 前端技术&#xff1a;JavaScript、VUE.js&#xff08;2.X&#xff09;、css3 J…

记录一次服务器CPU负载高,利用率正常的处理方法

背景&#xff1a; 在一次查看服务器监控的时候偶然发现其中一台服务器的CPU负载很高&#xff0c;但是CPU利用率基本没有&#xff0c;通过top命令完全看不出来问题所在&#xff0c;经过一些思路的排查发现了原因并处理&#xff0c;现记录下来。 现象&#xff1a; top命令查看…

前端js手写面试题汇总(一)

实现prototype继承 所谓的原型链继承就是让新实例的原型等于父类的实例&#xff1a; //父方法 function SupperFunction(flag1){this.flag1 flag1; }//子方法 function SubFunction(flag2){this.flag2 flag2; }//父实例 var superInstance new SupperFunction(true);//子继…

刷了一个月leetcode算法,成功收下阿里巴巴、网易等大厂的offer

前言 有人调侃我们说&#xff1a; 程序员不如送外卖。送外卖是搬运食物&#xff0c;自己是搬运代码&#xff0c;都不产出新的东西……透支体力&#xff0c;又消耗健康&#xff0c;可替代性极强&#xff0c;30岁之后就要面临被优化的危险……想跳槽&#xff0c;但是更高的平台…

Linux常见的链接命令有几种?分别是什么?

链接命令是创建链接文件&#xff0c;链接文件分为软链接和硬链接&#xff0c;软链接的作用是方便文件的快速访问&#xff0c;而硬链接的作用是可以给重要文件创建硬链接能够防止文件数据被误删。 学习目标&#xff1a;能够说出软链接的创建方式和硬链接的创建方式。 教程推荐…

青岛地铁交通咨询系统

大二课程《数据结构》课程设计项目&#xff0c;仅供参考 C&QT 项目地址 1.(重要)后台数据处理&#xff1a;使用图结构存储数据&#xff0c;利用最短路径选择算法进行路径选择&#xff1b; 2.检测输入框是否为空及输入合法性&#xff0c;使用模糊搜索实现站点的选择引导 &…

5.1获取物理内存容量

5.1获取物理内存容量 5.1.1学习Linux获取内存的方法 在 Linux 2.6 内核中, 是用 detect_memory 函数来获取内存容量的 其函数在本质上是通过调用 BIOS 中断 0x15 实现的&#xff0c; 分别是BIOS 中断 0x15 的3个子功能, 子功能号要存放到寄存器EAx或Ax中, 如下&#xff1a; 1…

【数据结构与算法】BFS 和 DFS

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;数据结构与算法 &#x1f320; 首发时间&#xff1a;2022年11月16日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e…

关于混合SDN网络的统一信息模型方面研究事件通知的多样性问题

关于混合SDN网络的统一信息模型方面研究事件通知的多样性问题面向混合SDN中异构设备的混合域发现协议Hybrid Domain Discovery Protocol (HDDP)HDDP的主要特点混合域发现协议(HDDP)协议介绍过程总结申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引…

阿里云研发工程师刘睿:阿里云消息生态及最佳实践

2022 年 9 月 24 日&#xff0c;阿里云用户组&#xff08;AUG&#xff09;第 12 期活动在厦门举办。活动现场&#xff0c;阿里云消息中间件研发工程师刘睿&#xff0c;向参会企业代表分享了阿里云消息生态及最佳实践。本文根据演讲内容整理而成。 众所周知&#xff0c;消息中间…

智能生活 App 垂直品类- IPC SDK 架构及快速集成配置(安卓版)

除了通用设备功能的应用开发&#xff0c;针对部分常见的全屋智能场景设备&#xff0c;智能生活 App SDK 提供了单独的垂直品类 SDK。包括智能摄像机 SDK、智能门锁 SDK、扫地机机器人 SDK、智能照明控制 SDK 等。 基于 智能生活 App SDK&#xff0c;垂直品类 SDK 面向这些特定…

适合编程初学者的开源博客系统(Flutter版)

目标 为编程初学者打造入门学习项目&#xff0c;使用各种主流编程语言来实现。让想学编程的&#xff0c;一个都不落下。 上述基本涵盖了当前编程开发所有主流语言&#xff08;我这里说的主流&#xff0c;直白点讲就是互联网公司都在用的&#xff09;。 左侧为前端版本&#x…

即将学习3D建模看过来,超高性价比电脑推荐

虽说建模还是台式最好&#xff0c;但是需要外出或者带回家工作的时候还是不方便的❌&#xff0c;咱们来看下怎么挑&#xff5e; 我们使用的建模软件为3DsMax、maya、zbrush等 建模的时候&#xff0c;对显卡和内存的要求较高&#x1f250; 显卡越好&#xff0c;模型面数多了也…

pwn调试环境搭建

应用场景 不同的pwn题有不同的环境要求&#xff0c;堆题要求更多&#xff0c;patchelf可以满足一定场景的实现&#xff0c;但终究不如在实际对应的环境中搭建。如何快速搭建一个高效节省资源的环境也是一个不小的问题。 方法 高效节省资源&#xff1a;一个主要调试环境多个运…