首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

redux-0.2.2.zip

前端 16.65KB 22 需要积分: 1
立即下载

资源介绍:

一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux ========================= An experiment in fully hot-reloadable Flux. **The API might change any day.** _**Don't use in production.**_ ## Why another Flux framework? Read **[The Evolution of Flux Frameworks](https://medium.com/@dan_abramov/the-evolution-of-flux-frameworks-6c16ad26bb31)** for some context. ### Design Goals * Hot reloading of everything. * A hook for the future devtools to "commit" a state, and replay actions on top of it during hot reload. * No `createAction`, `createStores`, `wrapThisStuff`. Your stuff is your stuff. * I don't mind action constants. Seriously. * Embrace decorators for React components. * Keep Flux lingo. No cursors or observables in core. * Have I mentioned hot reloading yet? ## Demo ``` git clone https://github.com/gaearon/redux.git redux cd redux npm install npm start ``` ## 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); }; } // Could also look into state in the callback form export function incrementIfOdd() { return (dispatch, state) => { if (state.counterStore.counter % 2 === 0) { return; } dispatch(increment()); }; } ``` ### 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 increment({ counter }) { return { counter: counter + 1 }; } function decrement({ counter }) { return { counter: counter - 1 }; } // what's important is that Store is a pure function too export default function counterStore(state = initialState, action) { // that returns the new state when an action comes switch (action.type) { case INCREMENT_COUNTER: return increment(state, action); case DECREMENT_COUNTER: return decrement(state, action); default: return state; } } // bonus: no special support needed for ImmutableJS, // just return its objects as the 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 (

Clicked: {counter} times

); } } ``` #### 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 inject it @performs('increment') export default class IncrementButton { render() { const { increment } = this.props; // injected by @performs return ( ); } } ``` #### 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'; // Prefer to use existing dispatcher const dispatcher = module.hot && module.hot.data && module.hot.data.dispatcher || createDispatcher(); // Pass (potentially hot-reloaded) stores and actions dispatcher.receive(stores, actions); // Store the dispatcher for the next hot reload if (module.hot) { 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 { /* ... */ } ``` ## FAQ ### How does hot reloading work? * http://webpack.github.io/docs/hot-module-replacement.html * http://gaearon.github.io/react-hot-loader/ * those `module.hot` lines in the dispatcher example above ### But you're using strings for injecting actions and store state! I'm not super happy about strings. If you find a better way, let me know and file an issue with your suggestions. ### Can I use this in production? I wouldn't. Many use cases are not be considered yet. If you find some use cases this lib can't handle yet, please file an issue.

资源文件列表:

redux-0.2.2.zip 大约有46个文件
  1. redux-0.2.2/
  2. redux-0.2.2/.babelrc 43B
  3. redux-0.2.2/.eslintrc 349B
  4. redux-0.2.2/.gitignore 40B
  5. redux-0.2.2/.jshintrc 75B
  6. redux-0.2.2/.npmignore 13B
  7. redux-0.2.2/LICENSE 1.05KB
  8. redux-0.2.2/README.md 5.49KB
  9. redux-0.2.2/TODO 148B
  10. redux-0.2.2/examples/
  11. redux-0.2.2/examples/counter/
  12. redux-0.2.2/examples/counter/App.js 273B
  13. redux-0.2.2/examples/counter/Counter.js 456B
  14. redux-0.2.2/examples/counter/actions/
  15. redux-0.2.2/examples/counter/actions/CounterActions.js 542B
  16. redux-0.2.2/examples/counter/actions/index.js 34B
  17. redux-0.2.2/examples/counter/constants/
  18. redux-0.2.2/examples/counter/constants/ActionTypes.js 108B
  19. redux-0.2.2/examples/counter/dispatcher.js 393B
  20. redux-0.2.2/examples/counter/stores/
  21. redux-0.2.2/examples/counter/stores/CounterStore.js 523B
  22. redux-0.2.2/examples/counter/stores/index.js 43B
  23. redux-0.2.2/examples/index.html 157B
  24. redux-0.2.2/examples/index.js 206B
  25. redux-0.2.2/examples/server.js 395B
  26. redux-0.2.2/examples/todo/
  27. redux-0.2.2/examples/todo/App.js 308B
  28. redux-0.2.2/examples/todo/Body.js 273B
  29. redux-0.2.2/examples/todo/Header.js 298B
  30. redux-0.2.2/examples/todo/actions/
  31. redux-0.2.2/examples/todo/actions/index.js 133B
  32. redux-0.2.2/examples/todo/constants/
  33. redux-0.2.2/examples/todo/constants/ActionTypes.js 35B
  34. redux-0.2.2/examples/todo/dispatcher.js 393B
  35. redux-0.2.2/examples/todo/stores/
  36. redux-0.2.2/examples/todo/stores/index.js 383B
  37. redux-0.2.2/examples/webpack.config.js 742B
  38. redux-0.2.2/package.json 1.11KB
  39. redux-0.2.2/scripts/
  40. redux-0.2.2/scripts/build 53B
  41. redux-0.2.2/src/
  42. redux-0.2.2/src/createDispatcher.js 4.28KB
  43. redux-0.2.2/src/index.js 156B
  44. redux-0.2.2/src/observes.js 1.89KB
  45. redux-0.2.2/src/performs.js 1.3KB
  46. redux-0.2.2/src/provides.js 784B
0评论
提交 加载更多评论
其他资源 redux-2.0.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-3.2.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-3.4.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-4.1.2.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.3.1.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.5.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.3.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.4.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management