- 内容简介
- 译者序
- 前言
- 第 1 章 安装配置新项目
- 第 2 章 Flexbox 布局介绍
- 第 3 章 用 React Native 开发一个应用
- 第 4 章 在 React Native 中使用导航
- 第 5 章 动画和滑动菜单
- 第 6 章 用 React Native 绘制 Canvas
- 第 7 章 使用 React Native 播放音频
- 第 8 章 你的第一个自定义视图
- 第 9 章 Flux 介绍
- 第 10 章 处理复杂的应用程序状态
- 第 11 章 使用 Node 来实现服务端 API
- 第 12 章 在 React Native 中使用文件上传
- 第 13 章 理解 JavaScript Promise
- 第 14 章 fetch 简介
- 第 15 章 在 iOS 中使用 SQLite
- 第 16 章 集成 Google Admob
- 第 17 章 React Native 组件国际化
- 附录 A React.js 快速介绍
- 附录 B Objective-C Primer
- 附录 C webpack 入门
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
从 React 到 Flux
我会以一个待办事项的应用(Todo Application)作为示例,告诉你如何从 Flux 中获益。我将按如下步骤逐步制作。
1.使用 ReactJS 做一个 demo。
2.逐步过渡到添加 React 组件。
3.逐步添加 Flux 组件。
打开终端,输入如下命令:
mkdir todoapp cd todoapp npm init npm install -g browserify npm install --save reactify flux react
当执行完上面的命令后,你的 package.json 文件会有如下内容:
package.json
{
"name": "todoapp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "browserify -t reactify main.js > build/main.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"flux": "^2.0.3",
"reactify": "^1.1.1"
}
}
创建如下文件结构:

在项目根目录中添加 index.html,作为我们的示例页面。
index.html
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="example"></div>
<script src="build/main.js"></script>
</body>
</html>
在 main.js 中,我们实现一个 Todo 应用中的基本模板,它包括一个用于输入的表单(Todo Item Input)、一个添加按钮(Add Button)和一个待办事项的项目列表(TodoList Component),如下图。

main.js
'use strict'
var React = require('react');
var TodoList = require('./components/TodoList');
var TodoApp = React.createClass({
getInitialState: function(){
return {
todos: []
}
},
componentDidMount: function(){
var todos = [
{id: 1, content: 'todo1'},
{id: 2, content: 'todo2'},
{id: 3, content: 'todo3'}
];
this.setState({
todos: todos
});
},
render: function(){
return (
<div>
<input type="text" ref="todo" />
<button onClick={this.addTodo}>add</button>
<h2>Todos:</h2>
<TodoList items={this.state.todos} />
</div>
);
}
});
React.render(<TodoApp />, document.getElementById('example'));
TodoList 组件返回一个 ul 组件,这个 ul 组件包含了一组 TodoItem 组件,如下:
./components/TodoList.js
'use strict'
var React = require('react');
var TodoItem = require('./TodoItem');
var TodoList = React.createClass({
render: function(){
var todoItems = this.props.items.map(function(item){
return <TodoItem item={item} key={item.id} />
});
return (
<ul>
{todoItems}
</ul>
);
}
});
module.exports = TodoList;
./components/TodoItem.js
'use strict'
var React = require('react');
var TodoItem = React.createClass({
getInitialState: function(){
return {edit: false, content: this.props.item.content}
},
handleEdit: function(){
this.setState({edit: true})
},
handleChange: function(){
this.setState({content: event.target.value})
},
render: function(){
if(this.state.edit === false) {
return (
<li>
{this.props.item.content}&<button onClick={this.
handleEdit}></button>
</li>
);
} else {
return (
<li>
<input type="text" value={this.state.content} onChange={
this.handleChange} />
</li>
);
}
}
});
module.exports = TodoItem;
现在这个模板如下图所示:

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论