javascript - 用数组中的多个父组件包装组件

标签 javascript reactjs

有没有办法用从数组传递的多个父组件来包装组件?

这是 HOC 能够处理的事情吗?

const WrapperComponent = props => {

    const wrappers = [ComponentA, ComponentB, ComponentC];

    // Should return something like:
    // return (
    //    <ComponentA><ComponentB><ComponentC>
    //         {props.children}
    //    </ComponentC></ComponentB></ComponentA>
    // );
}

最佳答案

您可以使用 reduceRight 方法,该方法将从最后一个元素开始,该元素将是最内部的组件,并将累加器值设置为传递给 HOC 函数的组件。

const ComponentA = ({ children }) => <div className="component-a">{children}</div>;
const ComponentB = ({ children }) => <div className="component-b">{children}</div>;
const ComponentC = ({ children }) => <div className="component-c">{children}</div>;

const WrapperComponent = (ChildComponent) => {
  const wrappers = [ComponentA, ComponentB, ComponentC];

  return wrappers.reduceRight((Prev, Component) => {
    return <Component>{Prev}</Component>
  }, <ChildComponent/> )
}

const MyComponent = () => <div> My component </div>
const App = () => WrapperComponent(MyComponent)

ReactDOM.render( <App/> , document.querySelector("#app"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"></div>

关于javascript - 用数组中的多个父组件包装组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62471484/

相关文章:

javascript - React中ajax后计数

css - 使用 React Styled Components 在两种类型的组件之间共享相同的样式

javascript - 无法将去抖动分配给类属性

javascript - 在生产中调用销毁时,不会从 Mongo 存储中删除 Express session 数据

javascript对象问题

reactjs - 带有 React 的 bootstrap-datepicker : onChange doesn't fire while onClick does

reactjs - React Router v6 - 访问嵌套路由和处理手写 url 的正确方法

javascript - Warning : flattenChildren(. ..): Encountered two children with the same key/Child keys must be unique

javascript - 如何使列表项滚动动画看起来连续/无限

javascript - 为表格中的每一行添加 onclick 事件