diff --git a/source.js b/source.js
index 0631a95..a24a3a0 100644
--- a/source.js
+++ b/source.js
@@ -4,25 +4,32 @@ export default function makeUniflowComponent (Component, stores) {
return class UniflowComponent extends React.Component {
constructor () {
super()
- this.forceUpdate = this.forceUpdate.bind(this)
+ var storeProps = {}
+ Object.keys(stores).forEach(key => storeProps[key] = stores[key].state)
+ this.state = { storeProps }
+ this.updateStorePropsState = this.updateStorePropsState.bind(this)
+ }
+
+ updateStorePropsState () {
+ var storeProps = {}
+ Object.keys(stores).forEach(key => storeProps[key] = stores[key].state)
+ this.setState({ storeProps })
}
componentDidMount () {
Object.keys(stores).forEach(key => {
- stores[key].addListener('change', this.forceUpdate)
+ stores[key].addListener('change', this.updateStorePropsState)
})
}
componentWillUnmount () {
Object.keys(stores).forEach(key => {
- stores[key].removeListener('change', this.forceUpdate)
+ stores[key].removeListener('change', this.updateStorePropsState)
})
}
render () {
- var storeProps = {}
- Object.keys(stores).forEach(key => storeProps[key] = stores[key].state)
- return
+ return
}
}
}
diff --git a/test.js b/test.js
index 1892610..eb941e1 100644
--- a/test.js
+++ b/test.js
@@ -3,6 +3,7 @@
import should from 'should'
import sinon from 'sinon'
import React from 'react'
+import ReactDOM from 'react-dom'
import EventEmitter from 'eventemitter3'
import jsdom from 'mocha-jsdom'
import make from './source'
@@ -15,7 +16,7 @@ function makeMockStore () {
return store
}
-class TestComponent {
+class TestComponent extends React.Component {
render () {
return
}
@@ -41,21 +42,21 @@ describe('makeUniflowComponent()', () => {
it('subscribes to all props after mounting', () => {
let Component = make(TestComponent, {a: storeA, b: storeB})
- React.render(, domNode)
+ ReactDOM.render(, domNode)
sinon.assert.called(storeA.addListener)
sinon.assert.called(storeB.addListener)
})
it('throws when rendered with non-store props', () => {
let Component = make(TestComponent, {a: 'foo'})
- let fn = () => React.render(, domNode)
+ let fn = () => ReactDOM.render(, domNode)
fn.should.throw()
})
it('unsubscribes to all props when unmounting', () => {
let Component = make(TestComponent, {a: storeA, b: storeB})
- React.render(, domNode)
- React.render(, domNode)
+ ReactDOM.render(, domNode)
+ ReactDOM.render(, domNode)
sinon.assert.called(storeA.removeListener)
sinon.assert.called(storeB.removeListener)
})
@@ -73,13 +74,13 @@ describe('makeUniflowComponent()', () => {
b: React.PropTypes.object
}
let Component = make(Child, {a: storeA, b: storeB})
- React.render(, domNode)
+ ReactDOM.render(, domNode)
})
it('re-renders when any store prop emits change event', () => {
let Component = make(TestComponent, {a: storeA})
let render = sinon.spy(Component.prototype, 'render')
- React.render(, domNode)
+ ReactDOM.render(, domNode)
sinon.assert.calledOnce(render)
storeA.emit('change')
sinon.assert.calledTwice(render)