React - 向子组件添加类

IT技术 reactjs
2021-05-18 05:38:20

我正在使用 react 并且我有一个组件,它只需要渲染子项并根据条件为它们添加一个类。最好的方法是什么?

4个回答

一周前我想通了,这就是我想要的:

export default class ContainerComponent extends React.Component {
    constructor(props) {
        super(props);

        this.modifyChildren = this.modifyChildren.bind(this);
    }

    modifyChildren(child) {
        const className = classNames(
            child.props.className,
            {...otherClassses}
        );

        const props = {
            className
        };

        return React.cloneElement(child, props);
    }
    render() {
        return (<div>
            {React.Children.map(this.props.children, child => this.modifyChildren(child))}
        </div>);
    }
}

为了简单起见:

const StyleInjector = ({ children }) => {
   const StyledChildren = () =>
    React.Children.map(children, child =>
      React.cloneElement(child, {
        className: `${child.props.className} ${PUT_YOUR_CLASS_HERE}`
      })
    );

  return <StyledChildren />;
};

几周前,我有一个要在 React 中实现的狂欢场景,没什么特别的,只是简单地切换活动类。我遵循了这个方法,就像一个魅力,但让我知道这是一个很好的方法。

{
 this.props.children.map((slide, index) => {
   return React.cloneElement(slide, {
      key: index,
      className: (this.state.currentActiveIndex === index) ?'active' : ''
   });
 })
}

您可以将props传递给孩子,它可以选择要应用的类(或仅传递类名,但这更具语义):

<Parent contentVisible={true}>
  <Child />
</Parent>

在您的孩子渲染中:

const classes = [];

if (props.contentVisible)
  classes.push('visible');

<div className={classes.join(' ')} />