【JAVASCRIPT】React + Redux
2016-07-10 16:55
549 查看
摘要
Redux 数据流图
View 层由React 控制, 根据state 变化 刷新渲染组件,作用是根据更新的数据重新渲染组件
Stroe 层其实就是state存储器,作用是更新数据
Dispatch 层根据action 更新 state, 作用是分发事件
Action 层绑定action类型和参数,并传递给dispatcher, 作用是通知有事件发生
这样保证预知组件的每个动作,并对每个动作做出相应的更新变化。
实战
html 部分
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>demo</title> </head> <body> <div id="container"></div> <script type="text/javascript" src="bundle/app.js"></script> </body> </html>
app.js
var Redux = require('redux'); var React = require('react'); var ReactDOM = require('react-dom'); // action creator var addTodoActions = function(text){ return { type: 'add_todo', text: text }; }; // reducers var todoReducer = function(state, action){ if(typeof state === 'undefined'){ return []; } switch(action.type){ case 'add_todo': return state.slice(0).concat({ text: action.text, completed: '未完成' }); break; default: return state; } }; var store = Redux.createStore(todoReducer); var App = React.createClass({ getInitialState: function(){ return { items: store.getState() }; }, componentDidMount: function(){ var unsubscribe = store.subscribe(this.onChange); }, onChange: function(){ this.setState({ items: store.getState() }); }, handleAdd: function(){ var input = ReactDOM.findDOMNode(this.refs.todo); var value = input.value.trim(); if(value) store.dispatch(addTodoActions(value)); input.value = ''; }, render: function(){ return ( <div> <input ref="todo" type="text" placeholder="输入todo项" style={{marginRight:'10px'}} /> <button onClick={this.handleAdd}>点击添加</button> <ul> { this.state.items.map(function(item){ return <li>{item.text} | 完成状态: {item.completed}</li>; }) } </ul> </div> ) }, }); ReactDOM.render( <App />, document.getElementById('container') );
相关文章推荐
- 【JAVASCRIPT】React 学习 - 登录实战
- ReactiveCocoa入门教程——第二部分
- 【ReactNative】react-native 布局
- React Native开发必备的10个插件包
- React Native开发必备的10个插件包
- React Native开发必备的10个插件包
- React独立组件间通信联动
- React Native UI布局总结
- reactiveCocoa rac_signalForControlEvents多次触发解决方法
- React在开发中的常用结构以及功能详解
- ReactiveCocoa的冷信号与热信号 探讨
- React升级后带来的两个小问题及处理
- React Native 常见问题总结(android端)
- 怎么运行别人的React-Native项目(android端)
- React实战-深入了解JSX
- react_native环境问题
- React Native控件之Touchable*系列组件详解(28)
- Virtual DOM 是React的精髓所在
- multi-reactor服务器模型的C++封装类(libevent+多线程实现)
- Immutable 详解及 React 中实践