React

组件开发入门

Introduction

本文组成:

React由Facebook的程序员创建,是一个非常强大的javascript类库。
一个很大的卖点是virtual DOM机制,在DOM操作的性能上有较大的优势。
React社区常常介绍它为MVC架构中的“V”,虽说如此,如果将React与Flux(以后将会介绍)结合,我们就可以轻松实现M与V的同步。
在本文中,将会用到博主前两天介绍的webpack。以下是博文链接:
webpack 学习笔记 01 使用webpack的原因
webpack 学习笔记 02 快速入门

Components

通过React,我们可以专注于可复用的组件开发,比如:一个下拉导航栏组件,一个功能齐全的数据表格。React中,像CommonJs标准中一样,React的组件与组件也能良好隔离,可以随意的在组件内部增加功能。
所有的React组件都需要实现一个函数: render,我们可以通过它,返回HTML或者调用其它的组件。正是这个基本的功能,给React带来了无限可能。

JSX

如果你曾经看过React相关的信息,那可能会对一个名词印象比较深刻:JSX。JSX使js无需""的包装,编写各类html tag。使得我们可以更快速的开发React组件(考虑到多行问题,在js中写HTML原本还是很麻烦的)。
我们可以借助一个js库,在浏览器中将JSX转换为js,但这不是推荐的做法,本文介绍了如何通过webpack在本地实现JSX到js的转换,使得浏览器不用解决这一问题。

Using JSX

render扮演着"ViewModel"的角色,在我们返回HTML信息前,将Model注入View,并加入各类js逻辑。
现在,我们新建一个目录,建立以下文件

index.html
entry.js
webpack.config.js

借助npm与bower我们可以快速下载依赖项

npm init
npm install babel-loader --save
bower install react
bower init

以下是index.html的内容,借助webpack,我们可以不用再修改它,就完成本示例了。

<html>
<head>
<meta charset="utf-8">
<title>react demo</title>
</head>
<body>
<script type="text/javascript" src="bundle.js" charset="utf-8"></script>
</body>
</html>

以下是webpack配置内容

module.exports = {
entry: "./entry.js",
output:{
path: __dirname,
filename: "bundle.js"
},
module: {
loaders: [
{
test: /\.js?$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel'
}
]}
}

配置做好了,让我们开始第一个JSX。

var React = require("./bower_components/react/react.js");

var Widget = React.createClass({
render:function(){
return(
<div>
<h1>React with webpack</h1>
</div>);
}
}); React.render(<Widget />, document.body);

运行指令

webpack -w

可以看到如下结果:

Using variables for attributes

如前文所说,React组件里可以加入任意的js逻辑,我们可以把刚才的JSX改成这样:

var Widget = React.createClass({
render:function(){
var text = "React with webpack";
return(
<div>
<h1>{text}</h1>
</div>);
}
});

Basics of a component

组件可以维护自己作用域下的各类状态值。使我们得以复用各类组件。
当我们通过向组件的attributes传值时,他们会作为properties而引用。这句话可能不好理解,我们看下代码:

var Widget = React.createClass({
render:function(){
var text = "";
return(
<div>
<h1>{this.props.displayText}</h1>
</div>);
}
}); React.render(<Widget displayText="React with webpack"/>, document.body);

State

properties适合用在一次渲染,不需要改变的组件场景。在状态需要动态改变的场合,我们会用到state。通过this.setState 函数以改变状态值,之后,组件会重新渲染(借助virtual DOM机制,这一部分还是蛮快的)。 以下是Demo

var Widget = React.createClass({
getInitialState: function(){
return{
number: 0
};
},
increment: function(){
this.setState({
number: this.state.number + 1
});
},
render: function(){
return(
<div>
<h1>{this.state.number}</h1>
<button onClick={this.increment}>Inc</button>
</div>);
}
});

显示的数字将伴随按钮点击上升。

The component lifecycle

所有的组件都是有生命周期的,这无疑为我们开发提供了很大的便利。比如刚才例子中的getInitialState,只会在控件装载(mount)后,调用一次。当然还有其它的生命周期函数:
componentWillMount在组件即将装载前调用,可以把Ajax放这。
componentDidMount在组件已经被渲染出了DOM后调用,这时,我们可以借助this.getDOMNode取到跟节点,做一些后续工作。
componentWillUnmount组件被移除时,相关资源的清理工作,就得在这里(如移除EventHandler,若EventHandler操作了不存在的组件,error自然就被抛出)。

Component Methods

通过getDefaultProps,我们可以为properties提供默认值,即当properties没有通过attributes传入,这些默认值会派上用场。

var Widget = React.createClass({
getDefaultProps: function(){
return{
number: 10
};
},
render: function(){
return(
<div>
<h1>{this.props.number}</h1>
</div>);
}
}); React.render(<Widget/>, document.body);

React并不提倡提供过多的模版功能,它提倡的是回归原始,比如:当我们需要用到repeater。我们可以这样:

var Widget = React.createClass({
render: function(){
var data =[1,2,3,4]; //请假设这是有用数据
var content = data.map(function(item){
return (<h2>{item}</h2>)
});
return(
<div>
<h1>{content}</h1>
</div>);
}
});

 
分类: react

React组件开发入门的更多相关文章

  1. React组件开发(一)初识React

    *React不属于MVC.MVVM,只是单纯的V层. *React核心是组件(提高代码复用率.降低测试难度.代码复杂度). *自动dom操作,状态对应内容. *React核心js文件:react.js ...

  2. wn-cli 像React组件开发一样来开发微信小程序

    项目地址:wn-cli wn-cli wn-cli 像React组件开发一样来开发微信小程序 名字由来:wn -> weapp native 取第一个字母 Install npm install ...

  3. react组件开发规范(一)

    这是通过修改项目运行在Google上时的警告,总结的的部分react组件开发规范: (1)编写组件时,一定要写PropTypes,切莫为了省事儿而不写! 如果一个Props不是required,一定在 ...

  4. jquery插件模式开发和react组件开发之间的异同

    jquery插件模式开发和react组件开发之间的异同

  5. react复习总结(1)--react组件开发基础

    这次是年后第一次发文章,也有很长一段时间没有写文章了.准备继续写.总结是必须的. 最近一直在业余时间学习和复习前端相关知识点,在一个公司呆久了,使用的技术不更新,未来真的没有什么前景,特别是我们这种以 ...

  6. React 实践记录 01 组件开发入门

    Introduction 本文组成: Ryan Clark文章Getting started with React的翻译. 博主的实践心得. React由Facebook的程序员创建,是一个非常强大的 ...

  7. React Native开发入门

    目录: 一.前言 二.什么是React Native 三.开发环境搭建 四.预备知识 五.最简单的React Native小程序 六.总结 七.参考资料   一.前言 虽然只是简单的了解了一下Reac ...

  8. React组件开发

    目录: 属性:props 内联样式 状态记忆 : state 生命周期 访问DOM 表单输入 承接快速入门篇:http://www.cnblogs.com/jasonnode/p/4444504.ht ...

  9. React 组件开发注意事项

    0.state的设定原则,如果render里用不到,则就不应该是一个state. 1.数组遍历时,用每一条数据的唯一标识作为key,尽量不要使用遍历的索引值作为key,如果它们从不重新排序,它们工作也 ...

随机推荐

  1. 基础知识(1)- Java程序设计概述

    1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语  1.2.1 简单性  1.2.2 面向对象  1.2.3 网络技能  1.2.4 健壮性  1.2.5 安全性  1.2.6 体系 ...

  2. 英特尔® 硬件加速执行管理器安装指南 — Microsoft Windows*

    介绍 本文将指导您安装英特尔® 硬件加速执行管理器(英特尔® HAXM),这是一款可以使用英特尔® 虚拟化技术(VT)加快 Android* 开发速度的硬件辅助虚拟化引擎(管理程序). 前提条件 英特 ...

  3. Gradle入门系列(转)

    Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言.近期,Gradle获得了极大的关注,这也是我决定去研究Gradle的原因. 这篇文章是 ...

  4. 移动应用开发(IOS/android等一下)在一般图像缓存方案评述(附流程图)

    在移动应用开发.我们经常从网络请求到该设备显示遇到的场景图片. 假设多次发动每个请求,废物流.浪费电.: 将图片持久化到磁盘也不失为一种策略:但每次从文件读取图片也存在一定的io开销,就算採用此策略, ...

  5. PC2日记——坑爹的第一天2014/08/28

    我不想安慰自己说今天是因为第一次将pc2用于实际的比赛经验不足而导致的今天出现种种问题,我想说的是自从我開始干后台我所做的每一件事都是第一次,所以这绝对不是让自己免去责怪的理由:我想说的是假设我今天是 ...

  6. Java代码检查工具

    FindBugs:不注重样式和格式,重视真正的缺陷和潜在的性能问题,,基于Bug Patterns,在不运行的情况下检查字节码代码质量. Jalopy:Java源代码格式化工具,可自定义规则. PMD ...

  7. Unity3D方法来隐藏和显示对象

    Unity3D作 在使用unity3d开发游戏的过程中.我们经常会遇到须要隐藏或者显示的操作,针对这一点,以下做了一些总结. 一.设置Renderer状态 在游戏的开发中,全部可以被渲染的物体都包括有 ...

  8. 网站通常使用一些javascript包裹 简化电话

    //对于Web地址参数 //前面加"=="进行标识,否则直接返回 //解码时依据是否含有"=="标识来决定是否要解码 var base64EncodeChars ...

  9. 2014在百度之星程序设计大赛 - 资格 第四个问题 Labyrinth

    小记:dfs暂停,不是决定性的 思维:由于只有三个方向向上和向下和向右,然后,我对待每列从左至右.然后,当在下一列的上一列的处理再加工每个值去获得正确的值,保存各坐标的数组格你可以得到最大值.每处理完 ...

  10. 开源Math.NET基础数学类库使用(10)C#进行基本数据统计

    原文:[原创]开源Math.NET基础数学类库使用(10)C#进行基本数据统计               本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p ...