reactjs - 柯里化增强组件
问题描述
我很难理解应用于反应组件的柯里化。
LanguageContext.js
<LanguageContext.Consumer>
{value => <Component languageContext={value} {...props} />}
</LanguageContext.Consumer>
)
导航栏.js
export default withLanguageContext(withStyles(styles)(Navbar))
一个更简单的例子。
const add = x => y => x + y
如果我们调用 add(2) ,它将返回一个柯里化值为 x 的函数。为了得到这个函数的结果,我们需要调用 add(2)(2) 这将返回 4。所以,当我们这样做时,在导航栏中
withLanguageContext(withStyles(styles)(Navbar))
根据我的理解,返回一个需要 props 的函数,以便在 LanguageContext.Consumer 之后返回。但是,我们没有明确传递任何道具。在这种情况下,我的期望是这样的: withLanguageContext(withStyles(styles)(Navbar))(props)
解决方案
Props 或多或少隐式传递给React Components,但在技术上它们是函数,因此使用 react 函数组件可能更容易说明。假设这是你的NavBar
:
const NavBar = props => (<div>...</div>);
我们清楚地看到,是的,它是一个函数,但我们从不将它称为一个函数,即NavBar(props)
,react 框架将其实例化为一个组件<NavBar {...props} />
,{NavBar}
即
这种模式在 React 世界中被称为高阶组件(HOC),而不是高阶函数的函数式编程名称。它们是返回其他反应组件的函数。
推荐阅读
- excel - SUMPRODUCT 使用数组作为条件
- javascript - 从 JSON 中提取参数
- facebook - 如何使用 facebook 应用令牌并替换页面访问令牌
- c# - 数据正确时 ModelState 返回错误
- python - 如何在 PyOpenGL 中将纹理应用于金字塔
- sql - SQL 根据父状态对项目进行分类
- c - 如何从文本中插入单词并通过 bst 跟踪词频?
- javascript - route.params 从不更新反应导航 v5
- java - Mondrian 尝试奇怪地优化 Segment.load 导致部分或完全空的结果
- powershell - 从 Proxyaddresses powershell 获取主 SMTP