首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将HTML元素传递给React中的高阶函数(HOC)?

如何将HTML元素传递给React中的高阶函数(HOC)?
EN

Stack Overflow用户
提问于 2018-02-18 09:48:27
回答 2查看 1.7K关注 0票数 6

我经常使用HOCs为现有的React组件提供额外的功能,这非常简单:

代码语言:javascript
复制
import Component from '/path/to/Component';
import higherOrderComponent from '/path/to/higherOrderComponent';

const EnhancedComponent = higherOrderComponent(Component);

但是,我需要包装一个简单的HTML,它不是作为一个独立的input组件存在的。我试过了

代码语言:javascript
复制
const EnhancedInput = higherOrderComponent(<input />);

并得到以下错误:

代码语言:javascript
复制
Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.

如何正确地传递输入?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-18 09:48:27

传递要包装的HTML元素的字符串名称:

代码语言:javascript
复制
const EnhancedInput = higherOrderComponent('input');

这个错误提示了我需要做什么,并且在分解JSX正在做的事情时更有意义。<input />就是React.createElement('input')JSX syntactic sugar

如果HOC看起来像这样:

代码语言:javascript
复制
const higherOrderComponent = (Component) => {
  return class extends React.Component {
    render() {
      return (
        <Component {...} />
      );
    }
  }
};

那么render方法最终将返回

代码语言:javascript
复制
React.createElement(Component, {...});

因此,将字符串'input'传递给HOC意味着它将返回React.createElement('input', {...});,这与上面断言的<input />相同。

票数 6
EN

Stack Overflow用户

发布于 2018-05-28 18:17:45

另一种解决方案是使用返回所需HTML的函数。

const EnhancedComponent = higherOrderComponent(()=><input />)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48847684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档