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

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

redux-0.9.0.zip

前端 19.12KB 12 需要积分: 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 wrapper calls in your stores and actions. Your stuff is your stuff. * Super easy to test things in isolation without mocks. * I don't mind action constants. Seriously. * 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 does 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 export function incrementAsync() { return dispatch => { setTimeout(() => { // Yay! Can invoke sync or async actions with `dispatch` dispatch(increment()); }, 1000); }; } // Could also read state of a store in the callback form export function incrementIfOdd() { return (dispatch, { counter }) => { if (counter % 2 === 0) { return; } dispatch(increment()); }; } ``` ### Stores ```js // ... too, use constants import { INCREMENT_COUNTER, DECREMENT_COUNTER } from '../constants/ActionTypes'; // what's important is that Store is a pure function, // and you can write it anyhow you like. // the Store signature is (state, action) => state, // and the state shape is up to you: you can use primitives, // objects, arrays, or even ImmutableJS objects. export default function counter(state = 0, action) { // this function returns the new state when an action comes switch (action.type) { case INCREMENT_COUNTER: return state + 1; case DECREMENT_COUNTER: return state - 1; default: return state; } // BUT THAT'S A SWITCH STATEMENT! // Right. If you hate 'em, see the FAQ below. } ``` ### Components #### Dumb Components ```js // The dumb component receives everything using props: import React, { PropTypes } from 'react'; export default class Counter { static propTypes = { increment: PropTypes.func.isRequired, decrement: PropTypes.func.isRequired, counter: PropTypes.number.isRequired }; render() { const { increment, decrement, counter } = this.props; return (

Clicked: {counter} times {' '} {' '}

); } } ``` #### Smart Components ```js // The smart component may observe stores using ``, // and bind actions to the dispatcher with `bindActionCreators`. import React from 'react'; import { Connector, bindActionCreators } from 'redux'; import Counter from '../components/Counter'; import * as CounterActions from '../actions/CounterActions'; // You can optionally specify `select` for finer-grained subscriptions // and retrieval. Only when the return value is shallowly different, // will the child component be updated. function select(state) { return { counter: state.counter }; } export default class CounterApp { render() { return ( {({ counter, dispatch }) => /* Yes this is child as a function. */ } ); } } ``` #### Decorators The `@connect` decorator lets you create smart components less verbosely: ```js import React from 'react'; import { connect, bindActionCreators } from 'redux'; import Counter from '../components/Counter'; import * as CounterActions from '../actions/CounterActions'; @connect(state => ({ counter: state.counter })) export default class CounterApp { render() { const { counter, dispatch } = this.props; return ( ); } } ``` #### Initializing Redux The simplest way to initialize a Redux instance is to give it an object whose values are your Store functions, and whose keys are their names. You may `import *` from the file with all your Store definitions to obtain such an object: ```js import { createRedux, Provider } from 'redux'; import * as stores from '../stores/index'; const redux = createRedux(stores); ``` Then pass `redux` as a prop to `` component in the root component of your app, and you're all set: ```js export default class App { render() { return ( {() => } ); } } ``` #### Running the same code on client and server The `redux` instance returned by `createRedux` also has the `dispatch(action)`, `subscribe()` and `getState()` methods that you may call outside the React components. You may optionally specify the initial state as the second argument to `createRedux`. This is useful for hydrating the state you received from running Redux on the server: ```js // server const redux = createRedux(stores); redux.dispatch(MyActionCreators.doSomething()); // fire action creators to fill the state const state = redux.getState(); // somehow pass this state to the client // client const initialState = window.STATE_FROM_SERVER; const redux = createRedux(stores, initialState); ``` #### Additional customization There is also a longer way to do the same thing, if you need additional customization. This: ```js import { createRedux } from 'redux'; import * as stores from '../stores/index'; const redux = createRedux(stores); ``` is in fact a shortcut for this: ```js import { createRedux, createDispatcher, composeStores } from 'redux'; import * as stores from '../stores/index'; // Compose all your Stores into a single Store function with `composeStores`: const store = composeStores(stores); // Create a Dispatcher function for your composite Store: const dispatcher = createDispatcher(store); // Create a Redux instance using the dispatcher function: const redux = createRedux(dispatcher); ``` Why would you want to write it longer? Maybe you're an advanced user and want to provide a custom Dispatcher function, or maybe you have a different idea of how to compose your Stores (or you're satisfied with a single Store). Redux lets you do all of this. When in doubt, use the shorter option! ## FAQ ### How does hot reloading work? * http://webpack.github.io/docs/hot-module-replacement.html * http://gaearon.github.io/react-hot-loader/ * Literally that's it. Redux is fully driven by component props, so it works on top of React Hot Loader. ### Can I use this in production? I wouldn't. Many use cases haven't been considered yet. If you find some use cases this lib can't handle yet, please file an issue. ### But there are switch statements! `(state, action) => state` is as simple as a Store can get. You are free to implement your own `createStore`: ```js export default function createStore(initialState, handlers) { return (state = initialState, action) => handlers[action.type] ? handlers[action.type](state, action) : state; } ``` and use it for your Stores: ```js export default createStore(0, { [INCREMENT_COUNTER]: x => x + 1, [DECREMENT_COUNTER]: x => x - 1 }); ``` It'

资源文件列表:

redux-0.9.0.zip 大约有50个文件
  1. redux-0.9.0/
  2. redux-0.9.0/.babelrc 43B
  3. redux-0.9.0/.eslintrc 349B
  4. redux-0.9.0/.gitignore 40B
  5. redux-0.9.0/.jshintrc 75B
  6. redux-0.9.0/.npmignore 13B
  7. redux-0.9.0/LICENSE 1.05KB
  8. redux-0.9.0/README.md 9.06KB
  9. redux-0.9.0/TODO 224B
  10. redux-0.9.0/examples/
  11. redux-0.9.0/examples/actions/
  12. redux-0.9.0/examples/actions/CounterActions.js 525B
  13. redux-0.9.0/examples/actions/TodoActions.js 133B
  14. redux-0.9.0/examples/components/
  15. redux-0.9.0/examples/components/AddTodo.js 327B
  16. redux-0.9.0/examples/components/Counter.js 501B
  17. redux-0.9.0/examples/components/TodoList.js 302B
  18. redux-0.9.0/examples/constants/
  19. redux-0.9.0/examples/constants/ActionTypes.js 145B
  20. redux-0.9.0/examples/containers/
  21. redux-0.9.0/examples/containers/App.js 450B
  22. redux-0.9.0/examples/containers/CounterApp.js 457B
  23. redux-0.9.0/examples/containers/TodoApp.js 638B
  24. redux-0.9.0/examples/index.html 157B
  25. redux-0.9.0/examples/index.js 126B
  26. redux-0.9.0/examples/server.js 420B
  27. redux-0.9.0/examples/stores/
  28. redux-0.9.0/examples/stores/counter.js 291B
  29. redux-0.9.0/examples/stores/index.js 62B
  30. redux-0.9.0/examples/stores/todos.js 325B
  31. redux-0.9.0/examples/webpack.config.js 742B
  32. redux-0.9.0/package.json 1.31KB
  33. redux-0.9.0/scripts/
  34. redux-0.9.0/scripts/build 65B
  35. redux-0.9.0/src/
  36. redux-0.9.0/src/Redux.js 1.02KB
  37. redux-0.9.0/src/components/
  38. redux-0.9.0/src/components/Connector.js 1.72KB
  39. redux-0.9.0/src/components/Provider.js 842B
  40. redux-0.9.0/src/components/connect.js 708B
  41. redux-0.9.0/src/components/provide.js 468B
  42. redux-0.9.0/src/createDispatcher.js 466B
  43. redux-0.9.0/src/createRedux.js 321B
  44. redux-0.9.0/src/index.js 472B
  45. redux-0.9.0/src/utils/
  46. redux-0.9.0/src/utils/bindActionCreators.js 230B
  47. redux-0.9.0/src/utils/composeStores.js 239B
  48. redux-0.9.0/src/utils/getDisplayName.js 119B
  49. redux-0.9.0/src/utils/shallowEqual.js 606B
  50. redux-0.9.0/src/utils/shallowEqualScalar.js 747B
0评论
提交 加载更多评论
其他资源 redux-0.10.1.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.11.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.12.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-1.0.0-rc.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.8.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.8.1.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.8.2.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management
redux-0.10.0.zip
一个可预测的全局状态管理的 JS 库 A JS library for predictable global state management