compose
没有摆脱将函数传递给函数调用结果的模式,但它减少了它的使用。
只有一个 HOC,使用 compose 没有任何好处:
// withStyles, without compose
export default withStyles(styles)(MyComponent)
// withStyles, with compose
export default compose(withStyles(styles))(MyComponent)
// connect, without compose
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent)
// connect, with compose
export default compose(connect(mapStateToProps, mapDispatchToProps))(MyComponent)
请注意,在最近才流行的函数调用之后立即启动另一个函数调用仍然存在compose
。
使用两个 HOC 有一个好处,compose
因为括号的嵌套更少:
// two HOCs, without compose
export default connect(mapStateToProps, mapDispatchToProps)(withStyles(styles)(MyComponent))
// two HOCs, with compose
export default compose(connect(mapStateToProps, mapDispatchToProps), withStyles(styles))(MyComponent)
如果您不习惯在创建后立即调用无名函数,这仍然很难理解。如果你愿意,你可以给它一个名字:
// two HOCs, with compose
const enhance = compose(connect(mapStateToProps, mapDispatchToProps, withStyles(styles));
// export default enhance(MyComponent);
当有多个 HOC 时,我更喜欢使用 compose,并直接使用它。我认为减少嵌套很有用,但给它一个通用名称enhance
是不必要的。