由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 相关文章推荐
IE8 兼容性问题(属性名区分大小写)
Jun 04 Javascript
详解Backbone.js框架中的模型Model与其集合collection
May 05 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
Oct 15 Javascript
Vue项目添加动态浏览器头部title的方法
Jul 11 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
Aug 20 Javascript
vue中轮训器的使用
Jan 27 Javascript
Angular7.2.7路由使用初体验
Mar 01 Javascript
重置Redux的状态数据的方法实现
Nov 18 Javascript
Angular封装表单控件及思想总结
Dec 11 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 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 柱状图实现代码
2009/12/04 PHP
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
PHP查询网站的PR值
2013/10/30 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
php计算年龄精准到年月日
2015/11/17 PHP
php图像验证码生成代码
2017/06/08 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
python使用分治法实现求解最大值的方法
2015/05/12 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
对Python实现累加函数的方法详解
2019/01/23 Python
python3实现表白神器
2019/04/09 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
小学语文国培感言
2014/03/04 职场文书
美术专业自荐信
2014/07/07 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
讲座新闻稿
2015/07/18 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python