由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 16 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 Javascript
jQuery页面加载初始化常用的三种方法
Jun 04 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
Mar 14 Javascript
JS实现的跨浏览器解析XML文件实例
Jun 21 Javascript
Angular 理解module和injector,即依赖注入
Sep 07 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
Jul 11 Javascript
node.js中http模块和url模块的简单介绍
Oct 06 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
Dec 01 Javascript
vue-cli脚手架-bulid下的配置文件
Mar 27 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
Sep 01 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
Sep 16 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编实现程动态图像的创建代码
2008/09/28 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
jQuery 使用手册(二)
2009/09/23 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
用js实现in_array的方法
2013/11/05 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
jQuery实现常见的隐藏与展示列表效果示例
2018/06/04 jQuery
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
python用插值法绘制平滑曲线
2021/02/19 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
介绍下static、final、abstract区别
2015/01/30 面试题
食堂个人先进事迹
2014/01/22 职场文书
个人党性剖析材料
2014/02/03 职场文书
旅游文化节策划方案
2014/06/06 职场文书
高三英语教学反思
2016/03/03 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL