1 | # Revue
|
2 |
|
3 | [![NPM version](https://img.shields.io/npm/v/revue.svg?style=flat-square)](https://www.npmjs.com/package/revue)
|
4 | [![NPM download](https://img.shields.io/npm/dm/revue.svg?style=flat-square)](https://www.npmjs.com/package/revue)
|
5 | [![Build Status](https://img.shields.io/circleci/project/egoist/revue/master.svg?style=flat-square)](https://circleci.com/gh/egoist/revue/tree/master)
|
6 |
|
7 | **New:** [Time to use Redux-devtools in non-React apps!](https://github.com/egoist/redux-devtools-script)
|
8 |
|
9 | ![](https://ooo.0o0.ooo/2015/12/01/565e513fc6d4a.png)
|
10 |
|
11 | ## Usage
|
12 |
|
13 | Obviously it works with Redux, install via NPM: `npm i -D redux revue`
|
14 |
|
15 | You can also hot-link the CDN version: https://npmcdn.com/revue, `Revue` is exposed to `window` object.
|
16 |
|
17 | ```javascript
|
18 | // App.js
|
19 | import Revue from 'revue'
|
20 | import store from './store'
|
21 | Vue.use(Revue, {
|
22 | store
|
23 | })
|
24 |
|
25 | // store.js
|
26 | // just put some reducers in `./reducers` like
|
27 | // what you do in pure Redux
|
28 | // and combine them in `./reducers/index.js`
|
29 | import { createStore } from 'redux'
|
30 | import reducer from './reducers/index'
|
31 | export default createStore(reducer)
|
32 |
|
33 | // component.js
|
34 | // some component using Revue
|
35 | new Vue({
|
36 | el: '#app',
|
37 | data () {
|
38 | return {
|
39 | counter: this.$revue.getState().counter
|
40 | }
|
41 | },
|
42 | ready () {
|
43 | // subscribe state changes
|
44 | this.$subscribe('counter')
|
45 | // if your name the 'counter' to 'temp_counter' in data()
|
46 | // you can use this.$subscribe('counter as temp_counter')
|
47 | },
|
48 | methods: {
|
49 | handleClickCounter () {
|
50 | // dispatch events
|
51 | this.$revue.dispatch({type: 'INCREMENT'})
|
52 | }
|
53 | }
|
54 | })
|
55 | ```
|
56 |
|
57 | [**More detailed usages**](/src)
|
58 |
|
59 | ## Hot-reload reducers
|
60 |
|
61 | Just change your `store.js` like this:
|
62 |
|
63 | Before:
|
64 |
|
65 | ```javascript
|
66 | import { createStore } from 'redux'
|
67 | import rootReducer from './reducers'
|
68 |
|
69 | export default createStore(rootReducer)
|
70 | ```
|
71 |
|
72 | After:
|
73 |
|
74 | ```javascript
|
75 | import { createStore } from 'redux'
|
76 | import rootReducer from './reducers'
|
77 |
|
78 | function configureStore() {
|
79 | const store = createStore(rootReducer)
|
80 | if (module.hot) {
|
81 | module.hot.accept('./reducers', () => {
|
82 | const nextRootReducer = require('./reducers').default
|
83 | store.replaceReducer(nextRootReducer)
|
84 | })
|
85 | }
|
86 | return store
|
87 | }
|
88 |
|
89 | export default configureStore()
|
90 | ```
|
91 |
|
92 | ## License
|
93 |
|
94 | MIT © [EGOIST](https://github.com/egoist)
|