eri*_*gio 6 jsx reactjs higher-order-components
我经常使用HOC为现有的React组件提供附加功能,这非常简单:
import Component from '/path/to/Component';
import higherOrderComponent from '/path/to/higherOrderComponent';
const EnhancedComponent = higherOrderComponent(Component);
Run Code Online (Sandbox Code Playgroud)
但是,我需要包装一个简单的HTML input
,它不作为独立的React组件存在。我试过了
const EnhancedInput = higherOrderComponent(<input />);
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.
Run Code Online (Sandbox Code Playgroud)
如何正确传递输入?
传递要包装的HTML元素的字符串名称:
const EnhancedInput = higherOrderComponent('input');
Run Code Online (Sandbox Code Playgroud)
该错误使我陷入需要做的事情,并且在分解JSX正在做的事情时更有意义。<input />
简直是JSX语法糖的React.createElement('input')
。
如果HOC看起来像这样:
const higherOrderComponent = (Component) => {
return class extends React.Component {
render() {
return (
<Component {...} />
);
}
}
};
Run Code Online (Sandbox Code Playgroud)
然后该render
方法最终将返回
React.createElement(Component, {...});
Run Code Online (Sandbox Code Playgroud)
因此,将字符串传递'input'
给HOC意味着它将返回React.createElement('input', {...});
,与<input />
上面声明的相同。
归档时间: |
|
查看次数: |
950 次 |
最近记录: |