React list onClick函数没有触发active toggle,如何解决?

klsxnrf1  于 2023-06-06  发布在  React
关注(0)|答案(3)|浏览(133)

启用活动切换
我目前正在使用React,我列出了一个列表,它们将在哪里有活动状态,我已经创建了onClick函数,但它不会工作。如果我尝试单击并期望切换,我得到的只是背景颜色的 Flink ,我希望div在激活时得到。

import React, { useState } from 'react';
import './Home.css';

function Home() {
  const [isActive, setIsActive] = useState({
    oneStar: true,
    twoStars: false,
    threeStars: false,
    fourStars: false,
    fiveStars: false,
  });

  return (
    <div className='app_card_container'>
      <div className='app_card_body'>
        <div className='app_card_list'>
          <div
            className={isActive.oneStar
              ? 'app_card_lists active'
              : 'app_card_lists'
            }
            onClick={() =>
              setIsActive({
                oneStar: true,
                twoStars: false,
                threeStars: false,
                fourStars: false,
                fiveStars: false,
              })
            }
          >
            1
          </div>
          <div
            className={isActive.twoStars
              ? 'app_card_lists active'
              : 'app_card_lists'
            }
            onClick={() =>
              setIsActive({
                oneStar: false,
                twoStars: true,
                threeStars: false,
                fourStars: false,
                fiveStars: false,
              })
            }
          >
            2
          </div>
          <div
            className={isActive.threeStars
              ? 'app_card_lists active'
              : 'app_card_lists'
            }
            onClick={() =>
              setIsActive({
                oneStar: false,
                twoStars: false,
                threeStars: true,
                fourStars: false,
                fiveStars: false,
              })
            }
          >
            3
          </div>
          <div
            className={isActive.fourStars
              ? 'app_card_lists active'
              : 'app_card_lists'
            }
            onClick={() =>
              setIsActive({
                oneStar: false,
                twoStars: false,
                threeStars: false,
                fourStars: true,
                fiveStars: false,
              })
            }
          >
            4
          </div>
          <div
            className={isActive.fiveStars
              ? 'app_card_lists active'
              : 'app_card_lists'
            }
            onClick={() =>
              setIsActive({
                oneStar: false,
                twoStars: false,
                threeStars: false,
                fourStars: false,
                fiveStars: true,
              })
            }
          >
            5
          </div>
        </div>
      </div>
    </div>
  );
}

export default Home;

下面是我的主题中涉及的div的CSS:

.app_card_list {
  display: flex;
  flex-direction: row;
}

.app_card_lists {
  margin-left: 1.5rem;
  display: flex;
  flex-direction: row;
  justify-content: center;
  width: 35px;
  height: 35px;
  background-color: hsl(216, 12%, 8%);
  text-align: center;
  align-items: center;
  border-radius: 50%;
  cursor: pointer;
  color: hsl(0, 0%, 100%);
}

.app_card_lists:hover {
  background-color: hsl(217, 12%, 63%);
}

.app_card_lists:active {
  background-color: red;
}
nue99wik

nue99wik1#

“:active”状态/属性与"active" CSS类名不同。

className={isActive.oneStar ? 'app_card_lists active' : 'app_card_lists'}

当一个项目处于“活动”状态时,您将其编码为同时具有"app_card_lists"***和"active"类名。CSS规则应该更像以下内容:

.app_card_lists {
  margin-left: 1.5rem;
  display: flex;
  flex-direction: row;
  justify-content: center;
  width: 35px;
  height: 35px;
  background-color: hsl(216, 12%, 8%);
  text-align: center;
  align-items: center;
  border-radius: 50%;
  cursor: pointer;
  color: hsl(0, 0%, 100%);
}

.active { /* active CSS class */
  background-color: red;
}

如果你想限制活动CSS规则的范围,你可以提供一个更具体的选择器。

.app_card_lists.active { /* both app_card_lists and active CSS classes */
  background-color: red;
}
sdnqo3pr

sdnqo3pr2#

实际上在你的代码里

app_card_lists active

这意味着在css文件中你应该有一个叫做active的类:

.active {
  background-color:  red;
}

正如您在代码中编写的那样,您正在检查div元素是否没有:active状态,哪个div元素没有。
资源mdn resources

js5cn81o

js5cn81o3#

这样设置你的状态:

const [activeStars, setActiveStars] = useState(1)

和你的可点击的星星像这样:

<div 
    className={activeStars <= 1 ? 'app_card_lists active' : 'app_card_lists'} 
    onClick={() => setActiveStars(1)}
>
1
</div>
<div 
    className={activeStars <= 2 ? 'app_card_lists active' : 'app_card_lists'} 
    onClick={() => setActiveStars(2)}
>
2
</div>
<div 
    className={activeStars <= 3 ? 'app_card_lists active' : 'app_card_lists'} 
    onClick={() => setActiveStars(3)}
>
3
</div>
<div 
    className={activeStars <= 4 ? 'app_card_lists active' : 'app_card_lists'} 
    onClick={() => setActiveStars(4)}
>
4
</div>
<div 
    className={activeStars <= 5 ? 'app_card_lists active' : 'app_card_lists'} 
    onClick={() => setActiveStars(5)}
>
5
</div>

相关问题