由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 相关文章推荐
用javascript控制iframe滚动的代码
Apr 10 Javascript
js getBoundingClientRect() 来获取页面元素的位置
Nov 25 Javascript
解决JS浮点数运算出现Bug的方法
Mar 12 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
js获取客户端网卡的IP地址、MAC地址
Mar 26 Javascript
jquery代码实现简单的随机图片瀑布流效果
Apr 20 Javascript
Javascript的无new构建实例详解
May 15 Javascript
js实现可键盘控制的简单抽奖程序
Jul 13 Javascript
Angular中使用$watch监听object属性值的变化(详解)
Apr 24 Javascript
jquery easyui如何实现格式化列
Jul 30 jQuery
关于layui表单中按钮自动提交的解决方法
Sep 09 Javascript
js实现左右轮播图
Jan 09 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
Protoss魔法科技
2020/03/14 星际争霸
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
php中的时间处理
2006/10/09 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
Sample script that deletes a SQL Server database
2007/06/16 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
js渐变显示渐变消失示例代码
2013/08/01 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python正则表达式介绍
2012/08/06 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
简单了解python单例模式的几种写法
2019/07/01 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
Python turtle画图库&amp;&amp;画姓名实例
2020/01/19 Python
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
建筑工程实习自我鉴定
2013/09/19 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
化学专业自荐信
2014/05/28 职场文书
2015年大学生工作总结
2015/04/21 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
无线电知识基础入门篇
2022/02/18 无线电
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript