为啥我不能应用 redux 的 connect with material-ui withStyles?

Posted

技术标签:

【中文标题】为啥我不能应用 redux 的 connect with material-ui withStyles?【英文标题】:Why I can't apply redux's connect with material-ui withStyles?为什么我不能应用 redux 的 connect with material-ui withStyles? 【发布时间】:2019-11-29 15:56:49 【问题描述】:

我正在尝试通过“recompose”中的 compose 函数通过 connect() 函数在 redux 容器组件中添加来自 material-ui 的 withStyles() 钩子,并从 recompose 包中获取此错误:

TypeError: Function.prototype.apply 在# 上被调用,这是一个对象而不是一个函数

我请求任何帮助,我已经花了太多时间了


import  withStyles  from '@material-ui/core/styles';
import  styles  from './styles';
import  compose  from 'recompose';
import  connect  from 'react-redux';

...

function mapStateToProps(state) 
  return 
    someVal: state.someVal,
  


function mapDispatchToProps(dispatch) 
  return (
    changeVal: () => dispatch('CHANGE_VAL')
  )


export default compose(
  withStyles(styles),
  connect(mapStateToProps, mapDispatchToProps)(App)
);


//if i do:

export default connect(mapStateToProps,mapDispatchToProps)(App)

//or:

export default withStyles(styles)(App)

//it's work. (just to clarify)

【问题讨论】:

export default connect(mapStateToProps,mapDispatchToProps)(withStyles(styles)(App)) 【参考方案1】:

connectwithStyles 都是HOC

高阶组件是一个接受一个组件并返回一个新组件的函数。

所以你需要将 App 包裹在 withStylesconnect

export default connect(mapStateToProps,mapDispatchToProps)(withStyles(styles)(App))

【讨论】:

以上是关于为啥我不能应用 redux 的 connect with material-ui withStyles?的主要内容,如果未能解决你的问题,请参考以下文章

connect redux函数不能与react-native一起使用

为啥 xState 不能与 react redux 一起使用?

Next.js,Redux 应用程序在 localhost 上运行良好,但不能在生产服务器上运行

为啥 redux 状态不能正确渲染?

connect 和 withRouter 问题

React 组件不调用 connect redux 函数