由ReactJS的Hello world说开来


Posted in Javascript onJuly 02, 2015

这篇文章提供了代码实例和在React.js(一个Facebook工程师开发的被用于构建用户界面的Javascript库)中高水平的概念.这些概念会被详细的发表在下面的文章里.在此,我必须提示如果你是一名ReactJS专家并且感觉这些代码需要改善,请您把建议写信给我,我会及时适当的更新这篇文章/代码.

在我继续发表一些代码实例之前,我必须特别的提出:初学ReactJS会有一点困难,因为最近我一直在AngularJS上写代码.到现在为止,我需要承认他们之间在帮助我们做UI工作时有很大的不同.我将发表另一篇博文对比他们之间的主要差异.

然而,在较高的水平上,下面是一些原因关于我为何在学习 ReactJS 时使用了略有些“陡峭”的学习路线:

  •     面向组件的:ReactJS是面向组件的,也就意味着,需要你将UI元素看作是组件。有趣的是,组件是可组合的。这意味着一个组件可以具有一个或多个内部组件。下面的代码演示了这一点
  •     JSX Syntax:它使用了一个有趣的JSX(XML式的)语法来编写代码。JSX转换器(一个预编译器)用来将这种语法结构转换为明显的JavaScript

    事件代理模型:它遵循了事件委托模型,用以捕获事件

下面是一些显示在代码中的关键概念:

  •     组件
  •     事件代理
  •     JSX 语法

以下是组件已实现内容的简要描述

- 输入框元素,用户可输入其用户名。在下面的文章中会提到,这个输入框实际是“UserName”组件

- div层元素,用于展示“Hello, userName”。在下面的文章中会提到,这个div层实际是“HelloText”组件

以下是其如何设计的。此外,请找到能代表下面概念的代码。


SayHello: 可组合的元件

SayHello是一个父组件,包含两个组件。这个父组件是由两个内部组件构成。其中一个组件是UserName,用来为用户提供输入姓名的功能,另一个组件是HelloText,用于展示文本,比如Hello,world。这个父组件定义了下列三个不同的API:

  1.     getInitialState
  2.     handleNameSubmit
  3.     render(这是一个必需的接口,一个组件需要定义render来告诉React响应如何渲染组件) 
/
 // This is the parent component comprising of two inner components
 // One of the component is UserName which is used to allow user to enter their name
 // Other component is HelloText which displays the text such as Hello, World
 //
 var SayHello = React.createClass({
 // This is used to set the state, "data" which is 
 // accessed later in HelloText component to display the updated state
 // 
 getInitialState: function() {
  return {data: 'World'}
 },
 // It is recommended to capture events happening with any children
 // at the parent level and set the new state that updates the children appropriately
 handleNameSubmit: function(name) {
  this.setState({data: name});
 },
 // Render method which is comprised of two components such as UserName and HelloText
 //
 render: function() {
  return(
  <div>
  <UserName onNameSubmit={this.handleNameSubmit}/>
  <HelloText data={this.state.data}/>
  </div>
  );
 }
 });

UserName组件

UserName组件有下列两个方法:

  1.     handleChange:用来捕获onChange事件
  2.     render:用于渲染组件
var UserName = React.createClass({
 handleChange: function() {
  var username = this.refs.username.getDOMNode().value.trim();
  this.props.onNameSubmit({username: username });
  this.refs.username.getDOMNode().value = '';
  return false;
 },
 render: function() {
  return(
  <form role="form" onChange={this.handleChange}>
   <div className="input-group input-group-lg">
   <input type="text" className="form-control col-md-8" placeholder="Type Your Name" ref="username"/>
   </div>
  </form>
  );
 }
 });

HelloText组件

HelloText组件仅有一个方法用于渲染组件

render:包含了展示HelloText组件内容的代码
 
var HelloText = React.createClass({
  render: function() {
  return (
  <div>
   <h3>Hello, {this.props.data}</h3>
  </div>
  );
  }
 });

如果你希望得到全部的代码,我已经将代码挂在 github hello-reactjs page。请各位自由评论或给出建议。

Javascript 相关文章推荐
JQuery DataTable删除行后的页面更新利用Ajax解决
May 17 Javascript
JS清除选择内容的方法
Jan 29 Javascript
jquery实现的淡入淡出下拉菜单效果
Aug 25 Javascript
探讨JavaScript语句的执行过程
Jan 28 Javascript
微信小程序 http请求详细介绍
Oct 09 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
Oct 21 Javascript
js如何编写简单的ajax方法库
Aug 02 Javascript
React中嵌套组件与被嵌套组件的通信过程
Jul 11 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
Nov 22 Javascript
js实现移动端轮播图
Dec 21 Javascript
JS eval代码快速解密实例解析
Apr 23 Javascript
angular异步验证器防抖实例详解
Mar 31 Javascript
深入理解JavaScript的React框架的原理
Jul 02 #Javascript
javascript实现简单的进度条
Jul 02 #Javascript
JavaScript实现添加、查找、删除元素
Jul 02 #Javascript
超级给力的JavaScript的React框架入门教程
Jul 02 #Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
Jul 02 #Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 #Javascript
JavaScript实现动态添加,删除行的方法实例详解
Jul 02 #Javascript
You might like
PHP中数组合并的两种方法及区别介绍
2012/09/14 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
web打印小结
2017/01/11 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
python递归函数绘制分形树的方法
2018/06/22 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
同程旅游英文网站:LY.com
2018/11/13 全球购物
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
应聘收银员个人的求职信
2013/11/30 职场文书
饮料业务员岗位职责
2013/12/15 职场文书
优秀求职信范文分享
2013/12/19 职场文书
学习之星事迹材料
2014/05/17 职场文书
员工安全承诺书
2014/05/22 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
遗失证明范文
2015/06/19 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
2022/04/22 SQL Server