由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 基础问答三
Dec 03 Javascript
一个JS的日期格式化算法示例
Jul 31 Javascript
js获取UserControl内容为拼html时提供方便
Nov 02 Javascript
jquery实现简单文字提示效果
Dec 02 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
Nov 29 Javascript
详解angular2封装material2对话框组件
Mar 03 Javascript
Bootstrap表单简单实现代码
Mar 06 Javascript
JS实现中英文混合文字溢出友好截取功能
Aug 06 Javascript
Vue利用History记录上一页面的数据方法实例
Nov 02 Javascript
使用localStorage替代cookie做本地存储
Sep 25 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
Aug 07 Javascript
JavaScript TAB栏切换效果的示例
Nov 05 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
人族 Terran 基本策略
2020/03/14 星际争霸
PHP开发中常用的十个代码样例
2016/02/02 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
JavaScript日历实现代码
2010/09/12 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
2017/09/08 Javascript
详解Vue中watch的高级用法
2018/05/02 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
酒店销售经理岗位职责
2014/01/31 职场文书
教师自我反思材料
2014/02/14 职场文书
美容院经理岗位职责
2014/04/03 职场文书
投标诚信承诺书
2014/05/26 职场文书
党员志愿者活动方案
2014/08/28 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
详细介绍python操作RabbitMq
2022/04/12 Python