由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之更有效率的字符串替换
Aug 02 Javascript
jquery 子窗口操作父窗口的代码
Sep 21 Javascript
Javascript实现滑块滑动改变值的实现代码
Apr 12 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
使用iframe window的scroll方法控制iframe页面滚动
Mar 05 Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 Javascript
jQuery中extend函数详解
Feb 13 Javascript
详解JavaScript中的自定义事件编写
May 10 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
May 18 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
Aug 16 Javascript
JavaScript中的相等操作符使用详解
Dec 21 Javascript
解决Vue-cli无法编译es6的问题
Oct 30 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读取和编写XML DOM的实现代码
2011/02/03 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
Python重新加载模块的实现方法
2018/10/16 Python
dpn网络的pytorch实现方式
2020/01/14 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
个人承诺书
2014/03/26 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
爱心活动计划书
2014/04/26 职场文书
求职信范文怎么写
2015/03/19 职场文书
小学体育教学随笔
2015/08/14 职场文书
服务行业标语口号
2015/12/26 职场文书
节水宣传标语口号
2015/12/26 职场文书