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 实践记录 01 组件开发入门的更多相关文章

  1. React组件开发入门

    React 组件开发入门 Introduction 本文组成: Ryan Clark文章Getting started with React的翻译. 博主的实践心得. React由Facebook的程 ...

  2. React 实践记录 04 Flux demo

    Introduction flux应用架构如下图所示,本文并不是讲述怎么立即做一个酷炫的应用,而是讲述如何依照这种框架,来进行代码的组织. 我们先把这个流程转述为文字:抛开与webAPI的交互不谈,以 ...

  3. React 实践记录 02 Flux introduction

    Introduction 本文组成: React 官方文档翻译 相关实践心得. 内容上是Flux的介绍,例子将会在以后写出. 一旦稍微多了解一点React,很难避免听到Flux这个名词. Flux是一 ...

  4. React 实践记录 03 React router

    Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...

  5. JavaWeb学习总结-01 JavaWeb开发入门

    一 基本概念 1 Web开发的相关知识 Web,表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面): ...

  6. web组件开发入门

    本文是学习慕课网阿当大话西游之WEB组件后的一个总结. 组件的分类 1 框架组件:依赖于某种框架的组件 2 定制组件:根据公司业务定制的组件 3 独立组件:不依赖框架的组件 定义和加载组件 解决css ...

  7. (二)Hololens Unity 开发入门 之 Hello HoloLens~

    学习源于官方文档 微软官文~ 笔记一部分是直接翻译官方文档,部分各人理解不一致的和一些比较浅显的保留英文原文 (二)Hololens Unity 开发入门 之 Hello HoloLens~ 本文主要 ...

  8. 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发

    每天记录一点:NetCore获得配置文件 appsettings.json   用NetCore做项目如果用EF  ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...

  9. Android开发入门要点记录:四大组件

    cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...

随机推荐

  1. C++类对象之间的类型转换和重载

    类对象和其他类型对象的转换 转换场合有: 赋值转换 表达式中的转换 显式转换 函数调用, 传递参数时的转换 转换方向有: 由定义类向其他类型的转换 由其他类型向定义类的转换 #include < ...

  2. hibernate学习四 hibernate关联关系映射

    在Hibernate中对象之间的关联关系表现为数据库中表于表之间的关系(表之间通过外键关联). 1 单向的一对一 主键关联  外键关联 2 单向的一对多 3 单向的多对一 4 单向的多对多 5 双向的 ...

  3. JS搜索商品(跟外卖app店内搜索商品一样) ,keyup函数和click函数调用

    HTML: input输入框: <input id="sea" type="text"> JS: //点击搜索商品 $('#mys').click( ...

  4. 5、html的body内标签之多行文本及下拉框

    一.多行文本 <textarea name="">默认值</textarea> 二.下拉框 1.单选 <select name="city& ...

  5. 面试6-----11 const和静态变量那些事儿

    6 看看const和指针的那些事儿 const在int*左边 const在int*右边 const在int*两边------>请看代码注释 (1)代码 #include <stdio.h& ...

  6. Flutter实战视频-移动电商-27.列表页_现有Bug修复和完善

    27.列表页_现有Bug修复和完善 小解决小bug 默认右侧的小类没有被加载 数据加载完成后,就list的第一个子对象传递给provide进行赋值,这样右侧的小类就刷新了数据 默认加载了第一个类别 调 ...

  7. Identity Server 4 原理和实战(完结)_建立Identity Server 4项目,Client Credentials 授权实例

    创建项目 dotnet new -i IdentityServer4.Templates 多出来的这些模板 adminUI用来测试,想要用再生产环境,需要交钱 结合core的 Identity来使用 ...

  8. UVa 11520 Fill the Square (水题,暴力)

    题意:给n*n的格子里填上A-Z的字符,保证相邻字符不同,并且字典序最小. 析:直接从第一个格子开始暴力即可,每次判断上下左是不是相同即可. 代码如下: #pragma comment(linker, ...

  9. Java字节码指令收集大全

    Java字节码指令大全 常量入栈指令 指令码 操作码(助记符) 操作数 描述(栈指操作数栈) 0x01 aconst_null null值入栈. 0x02 iconst_m1 -1(int)值入栈. ...

  10. IDL(Interactive Data Language——交互式数据语言)

    Interactive Data Language——交互式数据语言 目前,图像处理常用的ENVI就是用IDL开发的经典软件 广泛支持的平台: Microsoft Windows Open VMS S ...