javascript - 有没有办法在 React 中为装饰器创建组合函数?
问题描述
我正在开发一个完整的 Web 应用程序,其中包含一些使用多个装饰器 (HOC) 的组件。
我想知道是否有一种方法可以通过一次调用使用多个装饰器。
像这样的东西:
export default compose(
[
withFunctionality,
withProvider
]
)(MyComponent)
对应的代码应该是:
export default withProvider(
withFunctionality(
MyComponent
)
)
以下代码是我尝试过的:
function compose(hocs) {
return (Component) => hocs.reduce(
(component, hoc) => hoc(component),
Component
)
}
但是,当这样做时,我的某些组件不再起作用。
有什么问题吗?
仍可获取更多信息。
解决方案
您始终可以将flowRight
lodash 中的函数用作 compose 函数。
这是我的 GraphQL 项目中的一个实际示例,用于将我的查询/突变注入到我的组件中:
import { graphql } from "react-apollo";
import { flowRight as compose } from "lodash";
... some react code
// export like this
export default compose(
graphql(myQuery),
graphql(myMutation)
)(MyComponent);
此示例已在 GraphSQL 上下文中使用,但我认为您已经了解了使用组件组合其他内容的想法。
这也是函数在 lodash 文档中的工作方式。flowRight
推荐阅读
- jquery - 根据jquery中的单词匹配搜索数据表
- android - 如何通过单击菜单项来实现波纹动画?
- scala - 在哪种情况下使用合并与重新分区更好
- ios - UItextfied Keyboad returnkeyType 文本的本地化
- flutter - 水平可滚动的标签集中在中心,并在颤动中捕捉
- javascript - 如何使用 JQuery 在 TextBox 中粘贴文本
- sql-server - RING_BUFFER_CONNECTIVITY - LoginTimers - 在 MSSQL 中释放未使用的数据库连接时记录错误 17830
- python - 我想提取 QSTS_ID 列并用句号分隔并将其作为单独的列附加到现有列表中
- django - 多数据库环境中的 Django 模型实例 getattr
- amazon-ecs - 在网络负载均衡器 + 目标组后面运行 SSH 的 AWS ECS 服务使用 CodeDeploy 部署缓慢