cr0*_*9xx 9 javascript ecmascript-6 reactjs higher-order-components
有人可以解释一下 React 中的高阶组件吗?我已经阅读并重新阅读了文档,但似乎无法更好地理解。根据文档,HOC 通过创建一个返回反应组件的主函数,通过将参数传递给该函数来帮助消除重复。我有几个问题。
Button或EnhancedButton。我尝试创建一个这样的 HOC:
// createSetup.js
import React from 'react';
export default function createSetup(options) {
return class extends React.Component {
constructor(props) {
super(props);
this.state = {};
this.testFunction = this.testFunction.bind(this);
}
testFunction() {
console.log("This is a test function");
}
render() {
return <p>{options.name}</p>
}
}
}
// main.js
import React from 'react';
import {render} from 'react-dom';
import createSetup from './createSetup';
render((<div>{() => createSetup({name: 'name'})}</div>),
document.getElementById('root'););
Run Code Online (Sandbox Code Playgroud)运行这个不会显示 HOC,只显示 div
任何人都可以提供比给出的更好的例子吗?
Jos*_*sep 10
HOC 是一种函数,它将组件作为其参数之一,并以某种方式增强该组件。
如果 HOC 创建了一个新的增强组件,是否有可能根本不传入任何组件作为参数?
不,那么它就不是 HOC,因为其中一个条件是它们将一个组件作为参数之一,并返回一个具有一些附加功能的新 Component。
在这样的示例中,它是高阶组件,即 Button 或 EnhancedButton。
EnhanceButton是 HOC,FinalButton是增强组件。
我尝试像这样创建一个 HOC:...运行它不会显示 HOC,只显示 div
那是因为你的createSetup函数不是 HOC ......它是一个返回组件的函数,是的,但它不会将组件作为参数来增强它。
让我们看一个基本 HOC 的例子:
const renderWhen = (condition, Component) =>
props => condition(props)
? <Component {...props} />
: null
);
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
const EnhancedLink = renderWhen(({invisible}) => !invisible, 'a');
Run Code Online (Sandbox Code Playgroud)
现在您EnhancedLink将像一个a组件,但如果您将属性invisible集传递给true它,它将不会呈现...因此我们增强了a组件的默认行为,您可以使用任何其他组件来执行此操作。
在许多情况下,HOC 函数是柯里化的,而 Component arg 放在最后......像这样:
const renderWhen = condition => Component =>
props => condition(props)
? <Component {...props} />
: null
);
Run Code Online (Sandbox Code Playgroud)
就像connectreact-redux的功能……这使得组合更容易。看看recompose。
| 归档时间: |
|
| 查看次数: |
2478 次 |
| 最近记录: |