由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 相关文章推荐
JS应用之禁止抓屏、复制、打印
Feb 21 Javascript
超轻量级的基于jquery的三级展开列表
Apr 26 Javascript
JavaScript高级程序设计 DOM学习笔记
Sep 10 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
Jan 14 Javascript
jQuery获取当前对象标签名称的方法
Feb 07 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
js判断浏览器版本以及浏览器内核的方法
Jan 20 Javascript
JavaScript中5种调用函数的方法
Mar 12 Javascript
JS实现点击上移下移LI行数据的方法
Aug 05 Javascript
微信小程序访问豆瓣电影api的实现方法
Mar 31 Javascript
VueJS 取得 URL 参数值的方法
Jul 19 Javascript
js实现类选择器和name属性选择器的示例步骤
Feb 07 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程序员的13个好习惯小结
2012/02/20 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
记录几个javascript有关的小细节
2007/04/02 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
Javascript将字符串日期格式化为yyyy-mm-dd的方法
2016/10/27 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
2017/01/23 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
对Python中数组的几种使用方法总结
2018/06/28 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
python中entry用法讲解
2020/12/04 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
先进个人事迹材料
2014/01/25 职场文书
刑事起诉书范文
2015/05/19 职场文书