如何同时使用2个高阶组件? (为了使用 react-intl 中的 injectIntl)
How to use 2 higher-order components at the same time? (in order to use injectIntl from react-intl)
我知道为了使用 react-intl 库中的 injectIntl,我需要类似的东西:
export default injectIntl(SectionNavbars)
但是我已经在使用 withStyles 高阶组件,我该如何将两者结合起来?
import React from 'react'
/* more stuff */
import { injectIntl } from 'react-intl'
class SectionNavbars extends React.Component {
render() {
const { classes } = this.props;
const { intl } = this.props;
return (
<div className={classes.section}>
<Header
brand={ <img src={logo}/> }
rightLinks={
<ListItem className={classes.listItem}>
<CustomDropdown
buttonText={intl.formatMessage({ id: 'products' })}
buttonProps={{
className: classes.navLink,
}}
dropdownList={[
/*stuff*/
]}
/>
</ListItem>
}
/>
</div>
);
}
}
export default withStyles(navbarsStyle)(SectionNavbars);
你可以这样组合 HOC injectIntl(withStyles(navbarsStyle)(SectionNavbars))
或更好
- 您可以使用 recompose library
中的 compose
- 函数式编程的其他助手,例如
flow
和 flowRight
来自 lodash
此外,我建议您阅读 recompose 文档,它确实有助于理解 HOC 并提供非常有用的东西。
我知道为了使用 react-intl 库中的 injectIntl,我需要类似的东西:
export default injectIntl(SectionNavbars)
但是我已经在使用 withStyles 高阶组件,我该如何将两者结合起来?
import React from 'react'
/* more stuff */
import { injectIntl } from 'react-intl'
class SectionNavbars extends React.Component {
render() {
const { classes } = this.props;
const { intl } = this.props;
return (
<div className={classes.section}>
<Header
brand={ <img src={logo}/> }
rightLinks={
<ListItem className={classes.listItem}>
<CustomDropdown
buttonText={intl.formatMessage({ id: 'products' })}
buttonProps={{
className: classes.navLink,
}}
dropdownList={[
/*stuff*/
]}
/>
</ListItem>
}
/>
</div>
);
}
}
export default withStyles(navbarsStyle)(SectionNavbars);
你可以这样组合 HOC injectIntl(withStyles(navbarsStyle)(SectionNavbars))
或更好
- 您可以使用 recompose library 中的
- 函数式编程的其他助手,例如
flow
和flowRight
来自 lodash
compose
此外,我建议您阅读 recompose 文档,它确实有助于理解 HOC 并提供非常有用的东西。