一、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. 微信网页授权报code been used, hints: [ req_id: XYv1Ha07042046 ]

    先贴上代码: public function index() { $code = input('get.code'); $tool = new Wxtool(); if (empty($code)) ...

  2. Spring MVC之LocaleResolver详解

    2019独角兽企业重金招聘Python工程师标准>>> 对于LocaleResolver,其主要作用在于根据不同的用户区域展示不同的视图,而用户的区域也称为Locale,该信息是可以 ...

  3. 如何将Superset嵌入后台系统之实践

    1. 前言 此次实践过程全属个人学习,我选择了在window下安装Superset,并进行嵌入后台系统实践.对此进行实践过程总结,实践成果分享给大家,供大家参考,如果你有更好的想法,欢迎留言交流. 2 ...

  4. POJ - 2251 Dungeon Master (搜索)

    You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...

  5. The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 K题 center

    You are given a point set with nn points on the 2D-plane, your task is to find the smallest number o ...

  6. 从零开始制作数据集所需要的所有python脚本

    最近一直在做图片数据集,积累了很多心得.我把我所使用的python脚本全部拿出来,当然这些脚本大部分网上都有,只不过比较分散. 我已经把所有代码上传到github上,觉得写的好的话,请给我一个star ...

  7. WCF学习(二)

    WCF通道模型 绑定的本质是一个配置好的通道栈,为了方便程序员专著与业务逻辑,WCF提高了一系列常用绑定.随后会有相应的自定义通道栈代码 无论交互的另一方具体位置在哪里,WCF都会为消息的发送和接收建 ...

  8. webpack-常用配置知识点

    webpack配置多页面 webpcak配置多页面需要在entry中配置多个,在plugins中配置多个htmlWebpackPlugin,具体如下 entry:{ "index" ...

  9. 【FPGA篇章四】FPGA状态机:三段式以及书写方法

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 状态机是fpga设计中极其重要的一种技巧,状态机通过不同的状态迁移来完成特定的逻辑操作,掌握状态机的写法可以使fpga的开发事半功倍. 状态 ...

  10. QtCreator中使用链接库

    说明 之前讨论的DLL的静态链接和动态连接都是基于 MSVC 编译器,但是 MinGW 似乎有另外一套类似但是不相同的机制.下文均在 windows 下使用 Qt Creator 中使用 MinGW ...