How to validate component composition / “base”-component / rendered root component in React?

杀马特。学长 韩版系。学妹 提交于 2019-12-13 12:13:32

问题


It is common knowledge that when we want to "extend" a <Component> in React, we don't actually extend its class via inheritance, but use composition to render it with custom props inside our "derived" component, like this:

class Component extends React.Component {
  render() {
    return (<div className={ this.props.special_prop }>
              I'm a component!
            </div>);
  }
}

class DerivedComponent extends React.Component {
  render() {
    return (<Component special_prop='custom value' />);
  }
}

So this will create a new type of component <DerivedComponent>, which will still render a regular <Component>, but with custom values specified via props.

My question is, is there some way to validate that <DerivedComponent> actually renders a <Component> as its root component / that it is "derived" in that sense from <Component>?

I'm asking because I'm developing a listing component which will render list item components of numerous types in a list, but even though these list item components will be different types, each one will actually render the same root component, just customized with different props. I'd like to enforce, via propTypes or similar, that the children passed to the listing component are actually based on that common root-rendered component.

Had React used classical inheritance, it would just be a trivial matter of checking if each list item instance was also an instance of that common component; however, I do not believe that React has the API to query the root-rendered component of a composition.

Is there some way in React to enforce that the children are based on a specific root-rendered component?

来源:https://stackoverflow.com/questions/42826548/how-to-validate-component-composition-base-component-rendered-root-compone

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!