javascript - React Javascript中高阶函数中的两个箭头是什么
问题描述
以下是我正在查看的一个示例 HOC 函数,但没有从两个箭头的角度理解它的含义,特别是第二个箭头,我们正在解构孩子和道具。
const HOCFunction = (PassComponent) => ({children, ...props}) => {
return (<PassComponent {...props}>
{children.split("").reverse().join("")}
</PassComponent>)
}
根据 React 文档中提到的定义:
高阶组件是一个接受一个组件并返回一个新组件的函数。
那么这第二个参数到底是干什么用的呢?
整个代码:
const reverse = (PassedComponent) =>
({ children, ...props }) =>
<PassedComponent {...props}>
{children.split("").reverse().join("")}
</PassedComponent>
const name = (props) => <span>{props.children}</span>
const reversedName = reverse(name)
<reversedName>Hello</reversedName>
解决方案
像这样定义的 HOC 实际上只是高阶函数。返回函数的函数。在这种情况下,第一个函数接受一个 react 组件进行装饰,并返回一个函数式组件,其参数是最终将使用的组件的 props。
也许把它分解一下会更好。
// decorate some passed component
const reverse = (PassedComponent) => {
// define a new functional component
const WrappedComponent = ({ children, ...props}) => {
...
return (
<PassedComponent {...props}>
{children.split("").reverse().join("")}
</PassedComponent>
);
}
// return new wrapped component with reversed children
return WrappedComponent;
}
推荐阅读
- javascript - JS/Jquery 在没有销毁事件的情况下替换内部文本
- pipe - 在某些情况下写入管道块
- python - 对象没有属性“文本”
- python - How can I use pandas to output a specific column based on a user inputting another column?
- javascript - 如何为exportTableToCSV做JS变量替换?
- couchdb - Is there a way to config couchdb such that it automatically adds a timestamp to a new revision on the _utils view?
- java - 如何找到这个 Java 程序的 Big-O 复杂度和最坏情况下的运行时间?
- ruby-on-rails - 如何从 Rspec Mock 返回 2 个值?
- node.js - nodemailer 在使用 SMTP 时获得 EACCES
- azure-functions - Azure 函数在手动运行时出错,但按计划正常工作