一、React框架概述

官网:https://reactjs.org/       最新版V16.10

中文网:https://zh-hans.reactjs.org/

中文社区网:https://react-1251415695.cos-website.ap-chengdu.myqcloud.com/

由Facebook维护的MVVM框架,官方定义自己是一个“用于构建UI的JS库”——核心概念很少;但生态圈扩展非常广泛,如

React-Router:路由、

Redux: 状态保持、

ReactVR/360: 虚拟现实、

ReactNative:使用JS做App原生开发...

二、HTML元素属性(Attribute)  vs   JS DOM对象的属性(Property)

任何一个HTML元素都对应一个JSDOM对象,有两套属性系统。

 HTML元素属性                               JS  DOM对象的属性

Attribute                                                                    Property

-------------------------------------------------------------------------------

<img  src="" id="" title="">                                      img.src =""

img.id =""

img.title =""

--------------------------------------------------------------------------------

<img  class="">                                                          img.className = ""

--------------------------------------------------------------------------------

<label for="">                                                             label.htmlFor = ""

--------------------------------------------------------------------------------

<td  colspan="">                                                        没有对应项

---------------------------------------------------------------------------------

div.innerHTML =""

没有对应项                                                                   div.innerText =""

三、使用SCRIPT方式引入React

<div  id="box"></div>

<script  src="js/react.js"></script>    提供React对象

<script  src="js/react-dom.js"></script>   提供ReactDOM对象

<script>

let   el = React.createElement(标签名,属性列表,内容/子元素)

ReactDOM.render( el, box )

</script>

  /* 练习: 使用React在 #box中添加如下的DOM结构:
        <div class="login">
            <label for="uname">用户名</label>
            <input type="text"  id="uname"></input>
        </div> 
 */
    <div id="box"></div> 
    <script src="js/react.development.js"></script>
    <script src="js/react-dom.development.js"></script>
    <script>
 
     let c1 =React.createElement(
         'label',
         {htmlFor:'uname'},
         '用户名:'
     )
     let c2 = React.createElement(
         'input',
         {type:'text',id:'uname'}
     )
     let parent = React.createElement(
         'div',
         {className:'login'},
         c1,
         c2
     )
     //把上述元素渲染到DOM树
     ReactDOM.render( parent,box );
    </script>  
 

四、JSX

JavaScript  XML:形式是XML,本质是JS对象------可以看做是一种JS的变种(类似于TS) ------ 浏览器

无法理解JSX语法,必须用编译器转化为JS才能被浏览器执行。

JSX语法规范:

1.JSX不是字符串!最外侧不能有引号!

2.JSX形式上不是HTML语法,而是XML语法;故<br>必须写作<br/>;属性值必须用引号;有且只能有一个根元素。

3.JSX中可以使用HTML标签,但严格区分大小写-----任何HTML标签必须全小写,

自定义组件名必须使用大驼峰法则,如<MyHeader></MyHeader>

4.因为JSX中都是JS对象,所以属性都要使用DOM属性,而不是HTML属性,例如:

<p className="..."></p>

5.JSX片段中还可以出现JSX表达式:{ }

Babel:是一个第三方提供的JS变种编译器,可以把ES/TS/JSX转化为标准的JS代码,

使用方法:

<script  src="js/babel.js"></script>

<script  type="text/babel"></script>

练习:使用React在#box中添加如下的DOM结构-------使用JSX语法代替React.create()

<div class="login">

<label for="uname">用户名</label>

<input  type="text"  id="uname"></input>

</div>

<div  id="box">请稍候...</div>

<script  src="js/react.development.js"></script>

<script  src="js/react-dom.development.js"></script>

<script  src="js/babel.min.js"></script>

<script  type="babel">

let el =

<div className="login">

<label htmlFor="uname">用户名</label>

<input  type="text"  id="uname"></input>

</div>

ReactDOM.render(el, box);

</script>

 
五、JSX中{  }表达式
     提示:在JSX中,还可以使用{ }进行数据绑定或者运算,可以使用
在两种情形下:
1.<p>{表达式}</p>                         ------React中的内容绑定
2.<p  title={表达式}></p>              ------React中的属性绑定!
测试:JSX表达式中可以出现哪些语句:
 1)算术运算:可以
 2)比较运算:可以,但true/false都不显示
 3)逻辑运算:可以,但true/false都不显示
 4)三目运算:可以
 5)调用函数:可以,对象成员函数或全局函数或匿名自调函数都可以
 6)创建对象:只要是可以转换为字符串的对象就可以---------Angular中完全禁止。
 7)调用全局对象方法(JSON.stringify()):可以------Angular中不可以
 
6.React中如何实现各种数据绑定
   1.内容绑定:<p>{ 内容 }</p>
   2.属性绑定:<img  src={imgUrl}  title={myTitle}/>
   3.指令绑定:React中没有指令的概念
   4.事件绑定:
   5.双向数据绑定:
  
 
   注意:因为React中没有指令,所以类似于ngFor/ngIf的实现有哪些特别-----很重要!具体
见手册"核心概念">第7/8章"
React中的条件渲染:
function  check(){
   if()   return JSX
   else  return JSX
 }
let element = <div>{ check( ) }</div>
 
React中的循环渲染:
注意:{ 数组 }绑定语句会把数组中的每个元素展开并添加为当前元素的子节点
let  list =[ ... ]
let  element  =  <ul>
      {
          list.map((e,i)=>{
               return <li  key={i}>{e}</li>
            })
     }
</ul>
 
练习:创建一个数组,保存如下员工信息:
[
   {eid:101,ename:'dingding',salary:5000,sex:1},
   {eid:102,ename:'dongdong',salary:6000,sex:1},
   {eid:103,ename:'yaya',salary:7000,sex:0}
]
把上述数据渲染在一个table中,每个员工信息对应在一个tr,内部包含四个td
 
<div  id="app"></div>
<script src="js/react.development.js"></script>
<script src="js/react-dom.development.js"></script>
<script src="js/babel.min.js"></script>
let emp =[

   {eid:101,ename:'dingding',salary:5000,sex:1},
   {eid:102,ename:'dongdong',salary:6000,sex:1},
   {eid:103,ename:'yaya',salary:7000,sex:0}
  ]
 
//创建元素
let  el  = 
   <table  border="1" width="100%">
    <tbody>
            {
              emp.map((e,i)=>{
                  return   <tr  key={i}>
                     <td>{e.eid}</td>
                     <td>{e.ename}</td>
                     <td>{e.salary}</td>
                     <td>{e.sex}</td>
                  </tr>
               })
            }
    </tbody>
   </table>
//渲染元素
ReactDOM.render(el,app);
 
练习:创建一个变量声明用户当前的积分,若积分大于0,可以显示一个视频播放区域
(<video>),否则显示一段警告消息(<p>积分不足无法观看</p>)
 
   <div  id="app"></div>
   <script src="js/react.development.js"></script>
   <script src="js/react-dom.development.js"></script>
   <script src="js/babel.min.js"></script>
   <script type="text/babel">

let score=0;

   //let score=1000;
   //创建元素
    let  el=
    <div>
           {(function(){
              if(score>0)  return    <video></video>
              else return  <p>积分不足无法观看</p>
 
           })()}
    </div>
     //渲染元素
     ReactDOM.render(el,app)
 
7.React中的自定义组件
   概念:组件是一段可以反复使用的页面片段
   组件 = 模板 + 脚本(数据) + 样式
 
   React提供了两种自定义组件的方法:
   1.function组件-------一般只用于创建简单组件(只有模板)
         function  MyC01(){
              return  (JSX)
         }
        <MyC01></MyC01>
 
   2.class组件-------适合于创建复杂组件(模板+脚本数据)
      class  MyC02  extends  React.Component{   
                render(){
                       return  ( JSX )
                  }
        }
      <MyC02></MyC02>
    提示:React中要求组件名必须使用"大驼峰命名法"!
     

React框架概述的更多相关文章

  1. Web框架概述——React.js

    目前,在前端Web开发中,三大热门框架为React.js,Vue.js,Angular.js .当然,三大框架各有各的优缺点,这里就不多说了,下面我就针对前段时间所学的React框架做一下整体知识点的 ...

  2. Entity Framework 学习总结之一:ADO.NET 实体框架概述

    http://www.cnblogs.com/xlovey/archive/2011/01/03/1924800.html ADO.NET 实体框架概述 新版本中的 ADO.NET 以新实体框架为特色 ...

  3. ThinkPHP框架概述

    框架概述 1.什么是框架 框架,即framework.其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统. 2.框架的应用场景 ① 代码重用 ② 合理分工 ③ 解决团队协作开发问题 3. ...

  4. iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明

    iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...

  5. 当react框架遇上百度地图

      百度地图官方文档的使用指导是这样说的:在页面中引入<script type="text/javascript" src="http://api.map.baid ...

  6. 谈谈出入React框架踩过的坑

    1 在JSX的元素中写入内联样式,例如<div style={"color:blue"}></div> 报错:warning:Style prop valu ...

  7. struts2框架概述

    框架概述 什么是框架,为什么使用框架,框架优点 框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题 框架,即framework.其实就是某种应用的半成品,就是一组组件,供你 ...

  8. 芝麻软件: Python爬虫进阶之爬虫框架概述

    综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优 ...

  9. 【react】当react框架遇上百度地图

      百度地图官方文档的使用指导是这样说的:在页面中引入<script type="text/javascript" src="http://api.map.baid ...

随机推荐

  1. 隐藏响应中的server和X-Powered-By

    来源:https://www.yduba.com/biancheng-7831560074.html 有时候,我们用调试工具查看别人的网站时,经常看到 X-Powered-By:PHP/7.1.8 这 ...

  2. 写了Bug,误执行 rm -fr /*,我删删删删库了,要跑路吗?

    每日英语,每天进步一点点(偷笑): 前言 临近五一节,想到有 5 天假期,小林开始飘了. 写个简单的 Bash 脚本都不上心了,写完连检查都不检查,直接拖到到实体服务器跑. 结果一跑起来,发生不对劲, ...

  3. 【Linux常见命令】cp命令

    cp - copy files and directories 拷贝文件或目标文件夹,默认不能直接拷贝目录,通过-r参数设置递归复制目录 copy 语法: cp [OPTION]... [-T] SO ...

  4. 【Linux常见命令】dos2unix命令,unix2dos命令

    我们都知道.打回车键就是换行的意思. 在不同系统下打回车键效果是不同的: MAC OS下:dakdhih \r LINUX下:dakdhih \n DOS\WINDOWS下:dakdhih \r\n ...

  5. nat和静态映射

    拓扑图: 实验要求: 1.R2.R3能访问外网的4.4.4.4(4.4.4.4为R4上的环回接口,用来模拟inter网). 2.R4访问222.222.222.100其实访问到的是内网的192.168 ...

  6. Java_Web--JDBC 增加记录操作模板

    如果不能成功链接数据库,我的博客JAVA中有详细的介绍,可以看一下 import java.sql.Connection; import java.sql.DriverManager; import ...

  7. Linux下使用Rsync进行文件同步

    数据备份方案 1.需要备份的文件目录有(原则上,只要运维人员写入或更改的数据都需要备份)./data,/etc/rc.local,/var/spool/cron/root等,根据不同都服务器做不同的调 ...

  8. 支付宝小程序云开发(Serverless)

    支付宝小程序云开发(Serverless) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 一.在支付宝账号里面开通小程序云服务 ...

  9. 树的最小支配集 E - Cell Phone Network POJ - 3659 E. Tree with Small Distances

    E - Cell Phone Network POJ - 3659 题目大意: 给你一棵树,放置灯塔,每一个节点可以覆盖的范围是这个节点的所有子节点和他的父亲节点,问要使得所有的节点被覆盖的最少灯塔数 ...

  10. (2).mybatis单元测试(junit测试)

    一.Junit使用步骤:1.创建测试目录,(src.测试目录是test)2.在测试目录test中创建与src中相同的包名3.为需要测试的类创建测试类,例如:UsersMapper,测试类是UsersM ...