由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 类方法定义还是有点区别
Apr 15 Javascript
JQuery中each()的使用方法说明
Aug 19 Javascript
jQuery表格行换色的三种实现方法
Jun 27 Javascript
jquery解析XML字符串和XML文件的方法说明
Feb 21 Javascript
php+js实现倒计时功能
Jun 02 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
Apr 17 Javascript
基于jQuery滑动杆实现购买日期选择效果
Sep 15 Javascript
详解JavaScript中this关键字的用法
May 26 Javascript
分享jQuery网页元素拖拽插件
Dec 01 Javascript
详解element-ui日期时间选择器的日期格式化问题
Apr 08 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 Javascript
js实现简单图片拖拽效果
Feb 22 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
php的扩展写法总结
2019/05/14 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
js资料prototype 属性
2007/03/13 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
JS实现密码框效果
2020/09/10 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
Django卸载之后重新安装的方法
2017/03/15 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
为什么称python为胶水语言
2020/06/16 Python
幼儿园庆六一活动方案
2014/03/06 职场文书
导师评语大全
2014/04/26 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
环保证明
2015/06/23 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
基于JavaScript实现省市联动效果
2021/06/22 Javascript
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技