由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 09 Javascript
JQuery查找DOM节点的方法
Jun 11 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
Aug 02 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
Nov 24 Javascript
jquery的 filter()方法使用教程
Mar 22 jQuery
vue将单页面改造成多页面应用的方法
Nov 25 Javascript
vue返回上一页面时回到原先滚动的位置的方法
Dec 20 Javascript
vue中多路由表头吸顶实现的几种布局方式
Apr 12 Javascript
Ajax请求时无法重定向的问题解决代码详解
Jun 21 Javascript
Vue实现回到顶部和底部动画效果
Jul 31 Javascript
vue实现抽屉弹窗效果
Nov 15 Javascript
微信小程序 根据不同用户切换不同TabBar
Apr 21 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
memcache命令启动参数中文解释
2014/01/13 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
为你总结一些php系统类函数
2015/10/21 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
python登录并爬取淘宝信息代码示例
2017/12/09 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
python ChainMap的使用和说明详解
2019/06/11 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
Pytorch的mean和std调查实例
2020/01/02 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
Python实现结构体代码实例
2020/02/10 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
利用python画出AUC曲线的实例
2020/02/28 Python
python3注册全局热键的实现
2020/03/22 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
Order by的几种用法
2013/06/16 面试题
Linux内核产生并发的原因
2016/11/08 面试题
学雷锋树新风演讲稿
2014/05/10 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
铣工实训报告
2014/11/05 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android