React不支持IE6、IE7

React是什么?
用于构建用户界面的JAVASCRIPT库,是MVC中的V(视图)。

React特点
1. 声明式设计
2. 减少与DOM的交互,高效
3. JSX - JSX是JavaScript语法的扩展。React 开发不一定使用JSX,但建议使用它
4. 构建组件,方便应用在大项目中
5. 单向响应的数据流

一个实例:

  1. //把Hello, world输入到#example中
  2. ReactDOM.render(
  3. <h1>Hello, world</h1>,
  4. document.getElementById('example')
  5. );

React的安装:
react.min.js - React 的核心库
react-dom.min.js - 提供与 DOM 相关的功能
browser.min.js - 用于将 JSX 语法转为 JavaScript 语法

通过 npm 使用 React
参考:http://www.runoob.com/react/react-install.html

webstorm不支持babel的解决办法:
把引入的script库browser换成JSXTransformer,然后把type类型改为:text/jsx ,最后再把JavaScript版本修改为JSX Harmony就ok了。

JSX 就是 JavaScript

React 组件

React State 状态

getInitialState: 定义初始状态
handleClick: 程序自定义方法
render:
this.setState 修改状态值
this.state 当前状态值

React props (小道具)
state 可改变,容器组件里用的比较多
props 是不可变的
props:在容器里提取属性,比如:this.props.name 提取name的属性值

getDefaultProps() 设置默认 props 值

props 验证(不管用)
propTypes
React.PropTypes

React 组件 API
setState 设置状态 this.setState(fn/key: value) 最重要
replaceState 替换状态
setProps 设置属性
replaceProps 替换属性
forceUpdate 强制更新 尽量避免使用
getDOMNode 获取DOM节点
isMounted 判断组件挂载状态

组件API查询网址:
http://itbilu.com/javascript/react/EkACBdqKe.html

React 组件的生命周期
三个状态:
1. Mounting 已插入真实DOM
2. Updating 正在被重新渲染
3. Unmounting 已移出真实DOM

生命周期方法:
componentWillMount 渲染前调用
componentDidMount 第一次渲染调用,只在客户端,可以通过 this.getDOMNode() 进行访问,
如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异部操作阻塞UI)。

......

官方文档:
http://facebook.github.io/react/docs/component-specs.html#lifecycle-methods

React Ajax

React 表单与事件

this.refs 获取组件的引用

代码1:

  1. var i = 1;
  2.  
  3. // react 自动添加单位px
  4. var myStyle = {
  5. fontSize: 20,
  6. color: 'orange'
  7. };
  8.  
  9. var arr = [
  10. <h1>数组元素1</h1>,
  11. <h2>数组元素2</h2>
  12. ];
  13.  
  14. // react 组件
  15. var MyReactComponent = React.createClass({
  16. render: function () {
  17. return <h1>我是react组件,属性name的值:{this.props.name}</h1>;
  18. }
  19. }); // MyReactComponent 是组件名,组件名要求大写开头,否则会报错
  20.  
  21. ReactDOM.render(
  22. <div>
  23. <h1>使用表达式</h1>
  24. <h2>{1 + 1}</h2>
  25. <p>{i = 1 ? 'true' : 'false'}</p>
  26. <p data-myattribute="some_value">这是一个不错的JavaScript库</p>
  27. <p style = {myStyle}>样式</p>
  28. {/* 注释 */}
  29. {/* JSX支持在模板中添加数组,数组会自动展开 */}
  30. <div>{arr}</div>
  31. {/* react 组件,直接在标签里引入组件名,组件类只能包含一个顶层标签,否则也会报错 */}
  32. <MyReactComponent name='lqc_react' />
  33. </div>,
  34. document.getElementById('example')
  35. );

代码2:

  1. /**
  2. * 编写一个符合组件
  3. * 要求:1.有大标题
  4. * 2.有链接,链接点击进入百度首页
  5. */
  6.  
  7. var Name = React.createClass({
  8. render: function () {
  9. return <h1>{this.props.name}</h1>
  10. }
  11. });
  12.  
  13. var Link = React.createClass({
  14. render: function () {
  15. return <a target='_blank' href={this.props.link}>{this.props.link}</a>
  16. }
  17. });
  18.  
  19. var WebSite = React.createClass({
  20. render: function () {
  21. return (<div>
  22. <Name name={this.props.name} />
  23. <Link link={this.props.link} />
  24. </div>);
  25. }
  26. });
  27.  
  28. ReactDOM.render(
  29. <WebSite name='百度' link='http://www.baidu.com' />,
  30. document.getElementById('example')
  31. );

代码3:

  1. // 自定义 react 功能组件
  2. var Liked = React.createClass({
  3. // 设置默认状态,getInitialState() 是系统规定函数
  4. getInitialState: function () {
  5. return {liked: false};
  6. },
  7. // 自定义函数
  8. handleClick: function () {
  9. this.setState({liked: !this.state.liked});
  10. },
  11. render: function () {
  12. var text = this.state.liked ? '喜欢' : '不喜欢';
  13.  
  14. return (<p onClick = {this.handleClick}>
  15. <b>{text}</b>
  16. 点击喜欢或不喜欢切换状态
  17. </p>);
  18. }
  19. });
  20.  
  21. // 渲染到 HTML DOM
  22. ReactDOM.render(
  23. <Liked />,
  24. document.getElementById('example')
  25. );

代码4:

  1. props
  2. // 使用 props
  3. // 编写组件
  4. var HelloProps = React.createClass({
  5. // getDefaultProps() 设置默认 props 值
  6. getDefaultProps: function () {
  7. return {
  8. name: 'default'
  9. }
  10. },
  11. render: function () {
  12. return (<p>名字为:{this.props.name}</p>);
  13. }
  14. });
  15.  
  16. /**
  17. * 渲染到 HTML DOM
  18. */
  19. ReactDOM.render(
  20. <HelloProps name = 'realityName' />,
  21. document.getElementById('example')
  22. );

代码区:

  1. /****************************************/
  2. /**
  3. * 利用 state 和 props 建立一个 web 站点
  4. */
  5. var WebSite = React.createClass({
  6. getInitialState: function () {
  7. return {
  8. name: '百度',
  9. site: 'http://www.baidu.com'
  10. };
  11. },
  12. render: function () {
  13. return (<div>
  14. <Name name = {this.state.name} />
  15. <Site site = {this.state.site} />
  16. </div>);
  17. }
  18. });
  19.  
  20. var Name = React.createClass({
  21. render: function () {
  22. return (<h1>{this.props.name}</h1>);
  23. }
  24. });
  25.  
  26. var Site = React.createClass({
  27. render: function () {
  28. return (<a href = {this.props.site}>{this.props.site}</a>);
  29. }
  30. });
  31.  
  32. ReactDOM.render(
  33. <WebSite />,
  34. document.getElementById('example')
  35. );
  36.  
  37. /**************************************************/
  38.  
  39. /**
  40. * props 验证
  41. * @type {string}
  42. */
  43. var title = '标题';
  44. var title = 123;
  45.  
  46. var MyComponent = React.createClass({
  47. propTypes: {
  48. title: React.PropTypes.string.isRequired
  49. },
  50. render: function () {
  51. return (<div>{this.props.title}</div>);
  52. }
  53. });
  54.  
  55. ReactDOM.render(
  56. <MyComponent title = {title} />,
  57. document.getElementById('example')
  58. );
  59.  
  60. /*****************************************************/
  61.  
  62. // 设置点击次数
  63. var Counter = React.createClass({
  64. getInitialState: function () {
  65. return {
  66. count :0
  67. }
  68. },
  69. handleClick: function () {
  70. // 传入当前状态 state
  71. this.setState(function (state) {
  72. // 以键值对的方式重新赋值
  73. return {count: state.count + 1};
  74. });
  75. },
  76. render: function () {
  77. // 属性的方式调用函数不需要加括号
  78. return (<div>
  79. <p onClick = {this.handleClick}>点击我</p>
  80. <p>
  81. 您点击的次数为:{this.state.count}
  82. </p>
  83. </div>);
  84. }
  85. });
  86.  
  87. ReactDOM.render(
  88. <Counter />,
  89. document.getElementById('example')
  90. );
  91.  
  92. /*************************************************/
  93.  
  94. /**
  95. * React Ajax 获取 GitHub 用户最新 gist 共享描述
  96. */
  97.  
  98. var Gist = React.createClass({
  99. getInitialState: function () {
  100. return {
  101. username: '',
  102. lastGistUrl: ''
  103. }
  104. },
  105. // 获取数据
  106. componentDidMount: function () {
  107. this.serverRequset = $.get(this.props.site, function (result) {
  108. var getGist = result[0];
  109. console.log(getGist);
  110. this.setState({
  111. username: getGist.id,
  112. lastGistUrl: getGist.url
  113. });
  114. console.log(this);
  115. }.bind(this));
  116. },
  117. //取消未完成的请求
  118. componentWillUnmount: function () {
  119. this.serverRequset.abort();
  120. },
  121. render: function () {
  122. return (<div>
  123. <p>用户名:{this.state.username}</p>
  124. <p>密码:{this.state.lastGistUrl}</p>
  125. </div>);
  126. }
  127. });
  128.  
  129. ReactDOM.render(
  130. <Gist site = 'https://api.github.com/users/octocat/gists' />,
  131. document.getElementById('example')
  132. );
  133.  
  134. /************************************************************/
  135.  
  136. /**
  137. * 输入框更新 state
  138. */
  139.  
  140. var Message = React.createClass({
  141. getInitialState: function () {
  142. return {
  143. value: 'hello message'
  144. };
  145. },
  146. handleChange: function (event) {
  147. this.setState({
  148. value: event.target.value
  149. });
  150. },
  151. render: function () {
  152. return (
  153. <div>
  154. <input type='text' onChange={this.handleChange} value={this.state.value} />
  155. <p>{this.state.value}</p>
  156. </div>
  157. );
  158. }
  159. });
  160.  
  161. ReactDOM.render(
  162. <Message />,
  163. document.getElementById('example')
  164. );
  165.  
  166. /***********************************************************************/
  167. /**
  168. * 子组件上使用表单
  169. */
  170. var Content = React.createClass({
  171. render: function () {
  172. return (<div>
  173. <input type = "text" value = {this.props.myData} onChange = {this.props.updateValue} />
  174. <h4>{this.props.myTips}</h4>
  175. </div>);
  176. }
  177. });
  178.  
  179. var FormChange = React.createClass({
  180. getInitialState: function () {
  181. return {
  182. value: 'hello message'
  183. }
  184. },
  185. handleChange: function (event) {
  186. this.setState({
  187. value: event.target.value
  188. });
  189. },
  190. render: function () {
  191. return (<Content updateValue = {this.handleChange} myData = {this.state.value} myTips = {this.state.value} />);
  192. }
  193. });
  194.  
  195. ReactDOM.render(
  196. <FormChange />,
  197. document.getElementById('example')
  198. );
  199.  
  200. /*******************************************************************/
  201.  
  202. /**
  203. * 点我改变文字内容
  204. */
  205. var Content = React.createClass({
  206. render: function () {
  207. return (<div>
  208. <button onClick = {this.props.changeData}>点我改变文字内容</button>
  209. <b>{this.props.myData}</b>
  210. </div>);
  211. }
  212. });
  213.  
  214. var ChangeText = React.createClass({
  215. getInitialState: function () {
  216. return {
  217. value: '默认值'
  218. };
  219. },
  220. handleClick: function (event) {
  221. this.setState({value : '百度'});
  222. },
  223. render: function () {
  224. return (<Content myData = {this.state.value} changeData = {this.handleClick} />);
  225. }
  226. });
  227.  
  228. ReactDOM.render(
  229. <ChangeText />,
  230. document.getElementById('example')
  231. );
  232.  
  233. /*****************************************************/
  234.  
  235. /**
  236. * 点击按钮触发输入框获得焦点
  237. * this.refs 获取组件的引用
  238. * 使用 this 来获取当前的 react 组件
  239. */
  240.  
  241. var MyComponent = React.createClass({
  242. handleClick: function () {
  243. this.refs.myInput.focus();
  244. },
  245. render: function () {
  246. return (
  247. <div>
  248. <button onClick = {this.handleClick}>点击我,输入框获得焦点</button>
  249. <input type = "text"
  250. ref = "myInput"
  251. />
  252. </div>
  253. );
  254. }
  255. });
  256.  
  257. ReactDOM.render(
  258. <MyComponent />,
  259. document.getElementById('example')
  260. );

JavaScript库 — — React的更多相关文章

  1. React 16.3.0 发布,构建用户界面的 JavaScript 库

    React 16.3.0 已发布,React 是 Facebook 推出的一个为数据提供渲染为 HTML 视图,用来构建用户界面的开源 JavaScript 库. React 视图通常采用包含以自定义 ...

  2. Facebook开源的JavaScript库:React

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

  3. 20个简化开发任务的 JavaScript库

    所谓JavaScript库就是预先写好的可以简化基于JavaScript的应用程序开发的,尤其是Ajax和其它以web为中心的技术的 JavaScript代码集.JavaScript主要用于写内嵌于H ...

  4. 项目管理者必知:适用于仪表盘项目的7个优秀JavaScript库

    仪表盘是用于目标或业务流程的视觉指示工具,也用于切割杂乱无章的数据,从而分割出要点的重要工具.它可以帮助评估信息并及时做出正确的决定,一款实时可视化的仪表盘通常由图标.测绘图.图形符号以及数据表格等组 ...

  5. 为新项目添彩的 10+ 超有用 JavaScript 库

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  6. 34 个今年11月最受欢迎的 JavaScript 库

    作者:Iren Korkishko 译者:前端小智 来源:dev 点赞再看,养成习惯 本文 GitHub:github.com/qq449245884… 上已经收录,更多往期高赞文章的分类,也整理了很 ...

  7. 【转】20个简化开发任务的 JavaScript库

    原文出处: codegeekz   译文出处: oschina 所谓JavaScript库就是预先写好的可以简化基于JavaScript的应用程序开发的,尤其是Ajax和其它以web为中心的技术的 J ...

  8. 流行的JavaScript库 ——jQuery

    1.为了简化 JavaScript 的开发, 一些 JavsScript 库诞生了. JavaScript 库封装了很多预定义的对象和实用函数.能帮助使用者建立有高难度交互的 Web2.0 特性的富客 ...

  9. Libscore – 收集 JavaScript 库的使用数据

    Libscore 扫描网络上成千上万的网站,收集统计 JavaScript 库的使用数据.在搜索框中,输入关键词,例如 jQuery, Modernizr, $.ui 或者 $.fn.fancybox ...

随机推荐

  1. 关于javascript数据存储机制的一个案例。

    之前在学习js的结合性的时候,我有点不太明白,在网上找到一个比较经典的C语言优先级结合性的案例,就是下边这一个.本想在js之中测试一番,结果竟然发现得出的结果和网上的不一样,这令我百思不得其解,后经高 ...

  2. Ubuntu安装SHH服务

    1.打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入当前登录用户的管理员密码"--> ...

  3. opencv第一课,安装配置

    下载工具:本教程以OpenCV3.2.0为例. 解压:本教程解压到D盘,解压的其它地方也是可以的,解压完后得到一个名为opencv目录. 配置系统变量:选择此电脑(计算机)->右键属性选择-&g ...

  4. Gson的fromJson()方法

    Gson提供了fromJson()方法来实现从Json相关对象到Java实体的方法. 在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构. 先来看第一种: 比如jso ...

  5. [JavaScript]instanceof String not behaving as expected in Google Apps Script

    Link: http://stackoverflow.com/questions/11571923/instanceof-string-not-behaving-as-expected-in-goog ...

  6. Solr学习笔记(1) —— Solr概述&Solr的安装

    一.概述 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序. 1.1 实现方法 在一些大型门户网站.电子商务网站等都需要站内搜索功能,使用传统 ...

  7. Go语言基础环境配置(windows)

    一.基础软件包安装 需要安装go环境包.git.IDE(VScode),安装包见下图: 1.1 安装go windows环境直接双击安装包安装即可,在cmd窗口输入go,结果如下图所示即表示安装成功: ...

  8. 6-----selenuim和phantonJs处理网页动态加载数据的爬取

    动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding ...

  9. java——链表映射 LinkedListMap

    好像也不是基于链表来实现的,而是采用与链表类似的节点形式重新定义了一个节点内部类,以此来实现映射 public class LinkedListMap<K, V> implements M ...

  10. SQL SERVER – Configuration Manager – Cannot Connect to WMI Provider. You Do Not Have Permission or The Server is Unreachable

    打开SQL SERVER Configuarion Manger 出现以下错误 SQL Server Configuration Manager—————————Cannot connect to W ...