如何更改列表元素的类名

特里格森

我有一个组件,即项目列表。

render() {
    const { clickHandler } = this.props;
return (
    <section className="container birds-list">
        <ul className="birds-list__list">
            {this.props.list.map(({name, id}) => (
                <li key={id} className="birds-list__item">
                    <div className="shape shape-default"></div>
                    <div onClick={clickHandler} className="birds-list__item-name">{name}</div>
                </li>
            )
            )}
        </ul>
    </section>

在clickHandler函数中,我使用形状类名称更改div的背景颜色,例如 e.target.previousSibling.classList.add('shape-complete');

但是当我想用新名称重新渲染组件时,我想用'shape shape-default'更改所有具有默认类名称的div元素,而不是我添加了带有类的div元素, -完成')

德鲁·里斯(Drew Reese)

您已经在React之外对DOM进行了变异。您应该改为在“ Reactland”中控制您的类名。实现此目的的一种方法是将映射或某些数据结构保持在应用了类名的“选定”或“单击”元素的状态下(认为与选中的复选框类似)。

state = {
  clicked: {},
};

const clickHandler = id => this.setState(prevState => {
  const newClicked = {...prevState.clicked};
  newClicked[id] = !newClicked[id];
  return newClicked;
});

render() {
  ...
  this.props.list.map(({name, id}) => {
    const classNames = ['shape shape-default'];
    if (this.state.checked[id] classNames.push('shape-complete');

    return (
      <li key={id} className="birds-list__item">
        <div className={classNames.join(' ')}></div>
        <div onClick={clickHandler} className="birds-list__item-name">{name}</div>
      </li>
    )
  })
  ...

使用classnamesnpm软件包可以简化此过程

import classNames from 'classnames';
...

state = {
  clicked: {},
};

const clickHandler = id => this.setState(prevState => {
  const newClicked = {...prevState.clicked};
  newClicked[id] = !newClicked[id];
  return newClicked;
});

render() {
  ...
  this.props.list.map(({name, id}) => {
    const classnames = classNames(
      'shape',
      'shape-default',
      {
        'shape-complete': this.state.checked[id],
      },
    );

    return (
      <li key={id} className="birds-list__item">
        <div className={classnames}></div>
        <div onClick={clickHandler} className="birds-list__item-name">{name}</div>
      </li>
    )
  })
  ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更改列表元素的活动类

来自分类Dev

更改列表元素的活动类

来自分类Dev

更改li元素列表的类

来自分类Dev

如何更改类名?

来自分类Dev

查找特定的子元素并更改类名

来自分类Dev

更改列表中元素的类并循环

来自分类Dev

更改一个类的多个元素的类名

来自分类Dev

如何解析html元素的类名?

来自分类Dev

如何计算动态添加的元素的类名

来自分类Dev

如何从焦点/模糊更改父元素的类?

来自分类Dev

Ruby Watir,如何更改DOM元素的类?

来自分类Dev

如何使用JavaScript更改元素的类?

来自分类Dev

如何更改类中每个元素的颜色

来自分类Dev

如何更改类元素中按钮的文本?

来自分类Dev

如何更改Svelte组件的类名?

来自分类Dev

如何使用变量每秒更改类名?

来自分类Dev

如何更改 <td> 中的类名

来自分类Dev

python如何更改嵌套列表中的元素

来自分类Dev

如何使用Jquery更改列表元素的顺序?

来自分类Dev

如何使用Jquery更改列表元素的顺序?

来自分类Dev

没有类名的列表如何创建?

来自分类Dev

如何遍历列表并应用jQuery更改类

来自分类Dev

通过类名更改所有元素的仅左偏移

来自分类Dev

表元素和Javascript,类名未更改

来自分类Dev

如何在EA中更改枚举元素中的类元素

来自分类Dev

如何通过具有某些类的类名检查元素

来自分类Dev

如何检查元素是否是类列表中元素的子类

来自分类Dev

如何使用addClass()在元素的类列表中添加类

来自分类Dev

在React中,如何更改在迭代中创建的一个元素的类名,另一元素的onclick?