如何在preact中创建辅助(高阶组件)?

时间:2018-05-29 12:31:56

标签: javascript reactjs preact

我正在尝试使用preact构建一个应用程序,我创建了一个名为LayoutComponent的简单组件。

在布局组件中,我使用了Auxilary组件,如下所示:

import { h } from 'preact';
import Aux from '../../hoc/Aux';
const Layout = (props) => (
    <Aux>
        <div>
        Toolbar, Sidebar, Backdrop
        </div>
        <div>
            { props.children }
        </div>
    </Aux>
);
export default Layout;

下面提到的是我的Auxilary组件代码:

const Aux = ( props ) => props.children;
export default Aux;

当我从App.js render()方法调用LayoutComponent时,标记内的JSX内容不会显示。

如果我用标签替换标签,那么它工作正常,但我的DOM结构中不需要额外的div。

如果我使用Aux标签,则在chrome中显示类似这样的DOM。 enter image description here

请帮助。

2 个答案:

答案 0 :(得分:1)

问题是组件必须返回一个直接子项。在React中,最近通过引入Fragments解决了这个问题,但此功能目前还在Preact中not supported。 如果您确定该组件只有一个子组件,则可以这样插入:

const Aux = (props) =>
  props.children.length === 1 && props.children[0];

但是,由于您要在示例中插入两个子项,因此唯一的方法是将它们包装在div或任何其他标记中,如下所示:

const Aux = (props) => (
  <div>
    { props.children }
  </div>
);

答案 1 :(得分:0)

const aux = (props) => props.children;
export default aux;

只有两行! :D