React框架的基本运行原理与组件定义方式
/*
React: 创建,修改React组件,管理组件的生命周期
ReactDOM: 操作真实Dom, 将虚拟Dom渲染到真实的Dom之上。
*/
import React from "react";
import ReactDOM from "react-dom"; /*
在React中,不能像Vue中那样直接写html元素,要通过react的API创建元素React.createElelement()
React.createElement有三个参数,并返回一个dom对象,也就是js对象
参数一:标签名字符串
参数二:属性对象
参数三及其更多:子元素
*/ /*
JSX的原理是什么?
JSX是符合XML规范的JS语法
JSX只是一个语法糖,它内部运行的时候是把类似于HTML这样的标签代码转换为React.createElement的形式。 需要安装:npm i babel-preset-react -D
webpack没法编译jsx代码,它会找到babel进行编译这个代码,babel发现它是react内的语法,就会调用babel-preset-react插件进行解析
*/ /*
babel碰到<>按照html的语义, 使用React.createElement进行解析
碰到{}会按照js进行解析, {}中只能存放一个带返回值的js语句
*/ var list = []
for (let i = 0; i < 10; i++) {
var p = <p key={i} >这是for循环生成的p标签</p>
list.push(p)
} var myTitle = "这是标题的title"
var h2D = <div>
这是一个jsx的h2标题
<h1 title={ myTitle }>JSX真好用</h1>
{ list }
{/* 这是jsx中的注释 */}
</div> var divD = React.createElement("div", {title:"这是一个div", id:"rootSub"},"这是一个React创建的div", h2D) /*
将react元素渲染到页面对应的位置上。
*/
ReactDOM.render(divD, document.getElementById("root"))
React组件定义方式
/*
React中,构造函数就是一个最基本的组件, 使用时把构造函数的名称当做html标签名使用。
React自定义的组件必须是大写字母开头,小写字母编译器默认是浏览器提供的组件。会从浏览器中去查找。
*/
function Hello() {
return <div>
这是使用Hello构造函数 创建的基本组件Hello
</div>
}
import React from "react"
function World(props) {
return <div>
接收到的参数:{props.name}
<hr></hr>
</div>
}
export default World
{/* 如果传递的参数是个对象,可以进行对对象进行属性扩散进行批量传参 */}
<World {...person}></World>
// 1.构造函数, 创建对象
function Person(name, age) {
this.name = name;
this.age = age;
}
//Person.prototype中定义的方法和属性是是定义在当前对象的protoType中的(A区域)
Person.prototype.say = function () {
console.log('hello')
}
Person.prototype.myId = 220 var p1 = new Person('jack', 12);
console.log(p1); // 2.类,创建对象, 类的本质也是一个构造方法实现的
class Per {
//构造器, 调用new方法创建对象时,会调用个constructor
constructor(name, age){
this.name = name
this.age = age
}
//es6 定义的方法定义方式,类中的方法也是定义在当前对象的protoType中的(A区域)
say() {
console.log('这是Person中的hello方法')
} //class中的static方法和变量,是放在了constructor方法内部的原型对象中(B区域)
static myId = 230;
static myIdGet = function () {
console.log('myIdGet')
}
} var p2 = new Per('jack22', 122);
console.log(p2);
类的重要特性:封装,继承,多态, // 3.类的重要特性:封装,继承,多态,
//继承:实现功能的复用
class Chinese extends Per {
constructor(address, sex, name, age){
super(name, age)
this.address = address
this.sex = sex
}
} var c1 = new Chinese('北京', '男', 'jack', 12)
console.log(c1);
Chinese.myIdGet(); //多态:父类中定义一个抽象空方法,不同的子类进行不同的重写实现
class Animal {
say() { }
}
class Dog extends Animal {
say(){
console.log("wang wang");
}
}
class Cat extends Animal {
say(){
console.log("miao miao");
}
}
React框架的基本运行原理与组件定义方式的更多相关文章
- vue组件定义方式,vue父子组件间的传值
vue组件定义方式,vue父子组件间的传值 <!DOCTYPE html> <html lang="zh-cn"> <head> <met ...
- Serverless 的运行原理与组件架构
本文重点探讨下开发者使用 Serverless 时经常遇到的一些问题,以及如何解决 过去一年,我们和大量 Serverless 用户进行了线上和线下的交流,了解大家的业务场景.对 Serverless ...
- 测试框架Unitest的运行原理,以及多个测试类中的执行顺序以及简化方法
单元测试单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一 ...
- vue组件定义方式
一.全局组件 <div id="box"> {{msg}} <my-aaa></my-aaa> </div> var Home = ...
- Asp.net WebPages框架运行原理浅析(转)
在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用 WebFo ...
- Asp.net WebPages框架运行原理浅析
[来源] 达内 [编辑] 达内 [时间]2012-09-14 在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和 ...
- ASP.NET的运行原理与运行机制
在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用WebFor ...
- Dora.Interception, 一个为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式
相较于社区其他主流的AOP框架,Dora.Interception在Interceptor提供了完全不同的编程方式.我们并没有为Interceptor定义一个接口,正是因为不需要实现一个预定义的接口, ...
- Dora.Interception, 为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式
相较于社区其他主流的AOP框架,Dora.Interception在Interceptor提供了完全不同的编程方式.我们并没有为Interceptor定义一个接口,正是因为不需要实现一个预定义的接口, ...
- React Native运行原理解析
Facebook 于2015年9月15日推出react native for Android 版本, 加上2014年底已经开源的IOS版本,至此RN (react-native)真正成为跨平台的客户端 ...
随机推荐
- O2OA(翱途)开发平台如何在流程表单中使用基于Vue的ElementUI组件?
本文主要介绍如何在O2OA中进行审批流程表单或者工作流表单设计,O2OA主要采用拖拽可视化开发的方式完成流程表单的设计和配置,不需要过多的代码编写,业务人员可以直接进行修改操作. 在流程表单设计界面, ...
- pod reopened update慢
CocoaPods 镜像使用帮助 CocoaPods 是一个 Cocoa 和 Cocoa Touch 框架的依赖管理器,具体原理和 Homebrew 有点类似,都是从 GitHub 下载索引,然后根据 ...
- 【HTML】Echart图表
layui-echarts 简介 基于layui 实现的 echart 图表 Echart 官网 示例 Echart示例 下载Echart Echart下载 我们选择最下面的在线定制 我这里就按照它默 ...
- Linux设置字符编码
一.Linux设置字符编码 1.什么是字符编码 字符编码可以实现对非英文字符的支持,防止非英文字符的乱码. 2.国内常用的字符编码 UTF-8 GBK 3.设置字符编码 我们可以对Linux系统的字符 ...
- Django:django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported.
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/' ...
- Cesium-加载3D飞机模型沿指定路线前进
https://blog.csdn.net/Apple_Coco/article/details/108882146
- Baby_python 反编译
ok,直接pyc直接反编译 逻辑清楚 拿到flag直接搞 结果提交给错了我把前缀改成flag{}这种格式也给错真是摸不着头脑 难道是base64解密错误?? 找了另外一个网站 ???这个是啥?? 与之 ...
- 数仓备份经验分享丨详解roach备份原理及问题处理套路
本文分享自华为云社区<GaussDB(DWS) 备份问题定位思路>,作者: yd_216390446. 前言 在数据库系统中,故障分为事务内部故障.系统故障.介质(磁盘)故障.对于事务内部 ...
- BUGKU逆向reverse 1-8题
练习IDA两年半 打开尘封已久的bugku,从题目中练习使用,现在都已经是新版本了 orz 入门逆向 运行baby.exe将解压后的baby.exe拖到IDA里面主函数中找到mov指令 可以看到这里就 ...
- RocketMQ系列(一) 基本介绍
RocketMQ系列(一) 基本介绍 1.MQ 作用 MQ 的应用场景主要包含以下 3 个方面: 1.1.异步与解耦 当我们下了一个订单之后,订单服务会进行 RPC 同步调用 支付服务.库存服务.物流 ...