2017-09-29 66 views
0

我正在使用react-redux连接函数与withRouter函数,我也试图在这里使用compose()。这是代码:withRouter,connect()和react-compose

export default compose (
    withRouter, 
    connect(mapStateToProps) 
)(Dashboard); 

但是我收到一个错误:

Uncaught TypeError: Converting circular structure to JSON 
    at Object.stringify (<anonymous>) 
    at wrapWithConnect (connectAdvanced.js:84) 
    at applyFunctor (index.js:124) 
    at index.js:144 
    at Array.reduce (<anonymous>) 
    at ComposedComponent (index.js:143) 
    at ReactCompositeComponent.js:305 
    at measureLifeCyclePerf (ReactCompositeComponent.js:75) 
    at ReactCompositeComponentWrapper._constructComponentWithoutOwner (ReactCompositeComponent.js:304) 
    at ReactCompositeComponentWrapper._constructComponent (ReactCompositeComponent.js:279) 
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:187) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:370) 
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:257) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at ReactDOMComponent.mountChildren (ReactMultiChild.js:236) 
    at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:703) 
    at ReactDOMComponent.mountComponent (ReactDOMComponent.js:522) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:370) 
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:257) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:370) 
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:257) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at ReactDOMComponent.mountChildren (ReactMultiChild.js:236) 
    at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:703) 
    at ReactDOMComponent.mountComponent (ReactDOMComponent.js:522) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:370) 
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:257) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:370) 
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:257) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:370) 
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:257) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:370) 
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:257) 
    at Object.mountComponent (ReactReconciler.js:45) 
    at mountComponentIntoNode (ReactMount.js:104) 
    at ReactReconcileTransaction.perform (Transaction.js:143) 
    at batchedMountComponentIntoNode (ReactMount.js:126) 
    at ReactDefaultBatchingStrategyTransaction.perform (Transaction.js:143) 
    at Object.batchedUpdates (ReactDefaultBatchingStrategy.js:62) 
    at Object.batchedUpdates (ReactUpdates.js:97) 
    at Object._renderNewRootComponent (ReactMount.js:319) 
    at Object._renderSubtreeIntoContainer (ReactMount.js:401) 
    at Object.render (ReactMount.js:422) 

有什么问题吗?

回答

0

connect返回一个获取组件的函数。所以,我觉得如果你稍微改变你的括号它会工作:

export default compose(
    withRouter, 
    connect(mapStateToProps)(Dashboard) 
); 

或者:

export default connect(mapStateToProps)(compose(
    withRouter, 
    Dashboard 
);