redux
=========================
An experiment in fully hot-reloadable Flux.
The API might change any day. Don't use in production.
## What's It Look Like?
### Actions
```js
// Still using constants...
import {
INCREMENT_COUNTER,
DECREMENT_COUNTER
} from '../constants/ActionTypes';
// But action creators are pure functions returning actions
export function increment() {
return {
type: INCREMENT_COUNTER
};
}
export function decrement() {
return {
type: DECREMENT_COUNTER
};
}
// Can also be async if you return a function
// (wow, much functions, so injectable :doge:)
export function incrementAsync() {
return dispatch => {
setTimeout(() => {
dispatch(increment());
}, 1000);
};
}
```
### Stores
```js
// ... too, use constants
import {
INCREMENT_COUNTER,
DECREMENT_COUNTER
} from '../constants/ActionTypes';
// but you can write this part anyhow you like:
const initialState = { counter: 0 };
function incremenent({ counter }) {
return { counter: counter + 1 };
}
function decremenent({ counter }) {
return { counter: counter - 1 };
}
// what's important is that Store is a pure function too
export default function CounterStore(state, action) {
// ... that has an initial state
if (!state) {
return initialState;
}
// and return the new state when an action comes
switch (action.type) {
case INCREMENT_COUNTER:
return incremenent(state, action);
case DECREMENT_COUNTER:
return decremenent(state, action);
default:
return state;
}
}
```
### Components
#### Observing a Single Store
```js
// We're gonna need some decorators
import React from 'react';
import { observes } from 'redux';
// Gonna subscribe it
@observes('CounterStore')
export default class Counter {
render() {
const { counter } = this.props; // injected by @observes
return (
<p>
Clicked: {counter} times
</p>
);
}
}
```
#### Observing Many Stores
```js
// We're gonna need some decorators
import React from 'react';
import { observes } from 'redux';
// With multiple stores, you might want to specify a prop mapper as last argument.
// You can also access `props` inside the prop mapper.
@observes('CounterStore', 'TodoStore', (state, props) => ({
counter: state.CounterStore.counter,
todos: state.TodoStore.todos
}))
export default class TodosWithCounter {
/* ... */
}
```
#### Performing a Single Action
```js
// We're gonna need some decorators
import React from 'react';
import { performs } from 'redux';
// Gonna subscribe it
@performs('increment')
export default class IncrementButton {
render() {
const { increment } = this.props; // injected by @performs
return (
<button onClick={increment}>+</button>
);
}
}
```
#### Performing Many Actions
```js
// We're gonna need some decorators
import React from 'react';
import { performs } from 'redux';
// With multiple actions, you might want to specify a prop mapper as last argument.
// You can also access `props` inside the prop mapper.
@performs('increment', 'decrement', (actions, props) => ({
increment: props.invert ? actions.decrement : actions.increment,
decrement: props.invert ? actions.increment : actions.decrement
}))
export default class IncrementButton {
/* .... */
}
```
### Dispatcher
#### Creating a hot-reloadable dispatcher
```js
import * as stores from './stores/index';
import * as actions from './actions/index';
import { createDispatcher } from 'redux';
const dispatcher =
module.hot && module.hot.data && module.hot.data.dispatcher ||
createDispatcher();
dispatcher.receive(stores, actions);
module.hot.dispose(data => {
data.dispatcher = dispatcher;
});
export default dispatcher;
```
#### Attaching the dispatcher to the root component
```js
import React from 'react';
import { provides } from 'redux';
import dispatcher from './dispatcher';
@provides(dispatcher)
export default class App {
/* ... */
}
```
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
redux-0.2.0.zip (34个子文件)
redux-0.2.0
.eslintrc 349B
src
createDispatcher.js 4KB
performs.js 1KB
observes.js 2KB
index.js 156B
provides.js 784B
.jshintrc 75B
LICENSE 1KB
examples
counter
dispatcher.js 367B
Counter.js 456B
App.js 273B
stores
CounterStore.js 562B
index.js 43B
actions
CounterActions.js 371B
index.js 34B
constants
ActionTypes.js 108B
webpack.config.js 742B
server.js 395B
todo
Body.js 273B
dispatcher.js 367B
Header.js 298B
App.js 308B
stores
index.js 398B
actions
index.js 133B
constants
ActionTypes.js 35B
index.html 157B
index.js 206B
.babelrc 43B
package.json 1KB
.npmignore 13B
.gitignore 40B
TODO 219B
README.md 4KB
scripts
build 53B
共 34 条
- 1
资源评论
a3737337
- 粉丝: 0
- 资源: 2869
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2024中国行政区划多边形矢量数据(含有十段线)
- 106从中序与后序遍历序列构造二叉树.zip
- java-leetcode题解之Making A Large Island.java
- java-leetcode题解之Make Array Strictly Increasing.java
- java-leetcode题解之Magical String.java
- java-leetcode题解之Lowest Common Ancestor of a Binary Tree.java
- java-leetcode题解之Longest Word in Dictionary through Deleting.java
- java-leetcode题解之Longest Word in Dictionary.java
- java-leetcode题解之Longest Valid Parentheses.java
- java-leetcode题解之Longest Turbulent Subarray.java
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功