1.Virtual DOM

  1. 1.将网页所有内容映射到一颗树形结构的层级对象模型上,浏览器提供对dom的支持,用户可以是用脚本调用domapi来动态修改dom节点,从而达到修改网页目的,这种修改是浏览器完成的,浏览器会根据dom的改变重新绘制改变的dom节点部分
  2. 2.修改dom重新绘制渲染的代价太高,前端框架为了提高效率,尽量减少dom的重绘,提出了Virtual DOm,所有的修改都是在Virutal DOM上进行的,通过比较算法,找出浏览器dom之间的差别,使用这个差异操作dom,浏览器只需要渲染部分变化就可以
  3. react实现了dom diff算法可以高效对比virtual DOMdom差异

2.jsx语法

  1. jsx是一种javascrixml混写的语法,是javascript的扩展
  2. jsx规范
  3. 标签中首字母小写的就是html标记,首字母大写就是组建
  4. 要求严格的html标记,所有标记必须闭合,br应该携程<br />
  5. 单行省略小括号,多行请使用小括号
  6. 元素有多行,建以多行,注意缩进
  7. jsx表达式:使用{}括起来,如果大括号使用了引号,会当作字符串处理

3.jsx state

  1. import React from 'react';
  2. import ReactDom from 'react-dom'; //缺省必须放在{}外
  3.  
  4. class Toggle extends React.Component{
  5. state = {flag:true}
  6. handlerClick(event){
  7. console.log(event.target.id)
  8. console.log(event.target === this)
  9. console.log(this)
  10. console.log(this.state)
  11. this.setState({flag:!this.state.flag})//改变了state,并引起重绘;;点击触发了setstate,修改state变化了,导致render重绘
  12. }
  13. render(){
  14. return (<div id="t1" onClick={this.handlerClick.bind(this)}>
  15. click this sentense </div>) //onclick返回的还是函数,bind绑定返回函数,jsxonClick要用小驼峰,使用括号表示
  16. }//jsx中return 多行要用括号
  17. }
  18.  
  19. class Root extends React.Component {
  20. state = {
  21. p1:"python",
  22. p2:".com"
  23. }
  24. render(){
  25. this.state.p1 = "rocky"
  26. return (<div>welcome this.state.p1{this.state.p2}
  27. <br />
  28. <Toggle />
  29. </div>
  30. )//Toggle是组件因为首字母大写,定义在别处
  31. }
  32. }
  33. ReactDom.render(<Root />,document.getElementById("root")) //root是dom树,Root是react,jsx的组件,修饰tree
  34.  
  35. #注释
    state是私有属性,组件外无法直接访问,props是公有属性,组件外可以访问,只读

 react中的事件

  1. 使用小驼峰名明
  2. 使用jsx表达式,表达式中指定的事件处理函数
  3. 不能return false,如果要阻止默认行为,event.prevent.Default(); 鼠标放在标签上显示url,不想让其跳转

react props

  1. import React from 'react';
  2. import ReactDom from 'react-dom'; //缺省必须放在{}外
  3.  
  4. class Toggle extends React.Component{
  5. state = {flag:true}
  6. handlerClick(event){
  7. this.setState({flag:!this.state.flag})//改变了state,并引起重绘;;点击触发了setstate,修改state变化了,导致render重绘
  8. //setState 同步调用
  9. }
  10. render(){
  11. return (<div id="t1" onClick={this.handlerClick.bind(this)}>
  12. 点击这句话会触发一个事件{this.state.flag.toString()}<br />
  13. {this.props.name}:{this.props.parent.state.p1+this.props.parent.state.p2}<hr />
  14. <br />
  15. {this.props.children}
  16. </div>) //onclick返回的还是函数,bind绑定返回函数,jsxonClick要用小驼峰,使用括号表示
  17. }//jsx中return 多行要用括号
  18. }
  19.  
  20. class Root extends React.Component {
  21. state = {
  22. p1:"python",
  23. p2:".com"
  24. }
  25. render(){
  26. this.state.p1 = "rocky"
  27. return(
  28. <div>
  29. welcome {this.state.p1}{this.state.p2}<br />
  30. <Toggle name="school" parent={this} >
  31. <span>lslslslslslslsl</span><br />
  32. </Toggle>
  33. </div>)
  34. //Toggle是组件因为首字母大写,定义在别处
  35. }
  36. }
  37. ReactDom.render(<Root />,document.getElementById("root")) //root是dom树,Root是react,jsx的组件,修饰tree

无状态主键

  1. 无状态组件,也叫函数式组件
  2. 开发时候很多情况下,组件很简单,不需要state状态,也不需要使用函数生命周期,无状态组件很好了满足了需求
  3. 无状态组件函数提供了一个参数props,返回一个react元素
  4. 无状态函数本身就是render函数
  1. import React from 'react'
  2. import ReactDom from 'react-dom'
  3. import { rename } from 'fs';
  4.  
  5. function Root(props) {
  6. return <div>{prop.schoolname}</div>
  7. }
  8. //等同于上面的写法
  9. let Root = props=><div>{props.schoolname}</div>
  10. ReactDom.render(<Root schoolname='mage>'/>,document.getElementById('root'))

  

JavaScript之jsx&react的更多相关文章

  1. Facebook开源的JavaScript库:React

    React是Facebook开源的JavaScript库,采用声明式范例,可以传递声明代码,最大限度地减少与DOM的交互. React是Facebook开源的JavaScript库,用于构建UI.你可 ...

  2. 2017年 JavaScript 框架回顾 -- React生态系统

    前一篇文章中,我们介绍了2017年 JavaScript 框架的整体情况.我们也了解到在众多的前端框架中,目前最为庞大又在快速增长的当属 React 了,本文就来重点介绍 React 的生态系统. 首 ...

  3. 学习React前端框架,报错 'React' must be in scope when using JSX react/react-in-jsx-scope

    问题 import react from 'react'  改成  import React from 'react'   小写 react  改成 React

  4. 第九十三篇:ESLint:可组装的javaScript和JSX检查工具

    好家伙, 1.什么是ESLint? 代码检查工具,用来检查你的代码是否符合指定的规范 2.ESLint有什么用? 统一JavaScript代码风格的工具 在合作开发的时候, 每个成员的代码风格都有可能 ...

  5. React的使用与JSX的转换

    前置技能:Chrome浏览器   一.拿糖:React的使用 React v0.14 RC 发布,主要更新项目: 两个包: React 和 React DOM DOM node refs 无状态的功能 ...

  6. 【go】脑补框架 Express beego tornado Flux reFlux React jsx jpg-ios出品

    http://goexpresstravel.com/ 今天 Express 的作者 TJ Holowaychuk 发了一篇文章,正式宣告和 Node.js 拜拜了,转向 Go 语言. Go vers ...

  7. react.js 从零开始(三)JSX 语法及特点介绍

    什么是jsx? jsx = JavaScript + xml jsx 是一种 Ecmascript 的一种新标准. jsx 是一种 带有结构性的语法. jsx 的特点: 1.类xml语法易于理解. 2 ...

  8. React文档翻译系列(三)JSX简介

    # React文档翻译系列(三)JSX简介 先来看一下下面的变量声明: ``` const element = Hello world! ``` 这种有趣的标签语法既不是字符串也不是HTML. 这种形 ...

  9. React入门---JSX内置表达式-6

    个人理解:接触的JSX就是在React中render方法里面的js,因为里面只能有一个节点,所以你写的东西都在一个div中,要有js所以通过JSX来表达.(个人菜鸟理解,欢迎指正) React 使用 ...

随机推荐

  1. SpringBoot2 task scheduler 定时任务调度器四种方式

    github:https://github.com/chenyingjun/springboot2-task 使用@EnableScheduling方式 @Component @Configurabl ...

  2. Beta(1/7)

    鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...

  3. 4.2模拟赛 wormhole(期望DP Dijkstra)

    \(\color{white}{orzmjt又切题了...}\) \(Description\) 给定一张有向图,每条边在每一时刻有\(p_i\)的概率存在.求最优策略下从\(1\)走到\(n\)最少 ...

  4. DWM1000 收发RXLED TXLED控制代码修改

    DWM1000 模块一共可以最多外接4个LED,但是API默认只会只用到两个LED,分别是RXLED.TX LED. 特别注意:RXLED 是模块在RX 状态,而不是接收到数据. 修改代码,使得4个L ...

  5. Chapter 3 Introduction to Objects and Input/Output

    与声明一个primitive variable不同,声明一个对象的时候,并不创建用来存储一个对象的内存空间,而是创建了一个存储该对象所在内存空间的地址. 在java里,new是一个操作符,它让系统分配 ...

  6. I Think I Need a Houseboat POJ - 1005

    I Think I Need a Houseboat POJ - 1005 解题思路:水题 #include <iostream> #include <cstdio> #inc ...

  7. Bypass 360主机卫士SQL注入防御(附tamper脚本)

    0x01 前言 在测试过程中,经常会遇到一些主机防护软件,对这方面做了一些尝试,可成功bypass了GET和POST的注入防御,分享一下姿势. 0x02 环境搭建 Windows Server 200 ...

  8. day 23 二十三、对象方法,类方法,封装,绑定方法

    一.对象的特有名称空间 __init__方法会在实例化对象时被调用 1.会为实例化的对象形成空的名称空间 2.就是一个方法,可以被传参,在类名(实参)这种方式下调用并传参 __init__(self ...

  9. Jumpserver之设置开机自启动

    vi /usr/lib/systemd/system/jms.service [Unit] Description=jms After=network.target mariadb.service r ...

  10. oracle 内存不足处理

    alter日志 TNS-12535: TNS:operation timed out ns secondary err code: 12606 nt main err code: 0 nt secon ...