reactjs 仅在React时切换一个li元素

zsbz8rwp  于 2022-11-04  发布在  React
关注(0)|答案(2)|浏览(149)

我想在我的项目上的活动元素之间切换颜色,但这样他们都改变了点击的风格,我怎么能解决这个问题呢?谢谢!

function Language() {

  const [style, setStyle] = useState(false);

  const changeStyle = () => {   
    setStyle(!style);
  };

  return (
    <>
      <ul className="lang">
        {languages.map(({ code, name, country_code }) => (
          <li key={country_code}>
            <h4 onClick={() => {i18next.changeLanguage(code); changeStyle()}} className={style ? "cont" : "cont2"}>{name}</h4>
          </li>
        ))}
      </ul>
    </>
  );
}
f87krz0w

f87krz0w1#

您可以尝试使用活动元素的索引作为状态,而不是使用布尔值作为状态:

function Language() { 
  const [active, setActive] = useState(-1); // -1 represents no active element

  const changeStyle = (index) => {   
    setStyle(index);
  };

  return (
    <>
      <ul className="lang">
        {languages.map(({ code, name, country_code }, i) => ( // get index as i
          <li key={country_code}>
            <h4 onClick={() => {i18next.changeLanguage(code); changeStyle(i)}} className={active === i ? "cont" : "cont2"}>{name}</h4>
          </li>
        ))}
      </ul>
    </>
  );
}

然后,您将能够检查此li的索引是否与活动索引相同。

7gcisfzg

7gcisfzg2#

您可以将活动li的代码设置为状态值,并检查状态值是否等于li的代码值或任何其他唯一值。

function Language() {
  const [active, setActive] = useState('');      
  const changeStyle = (code) => setActive(code)

  return (
    <>
      <ul className="lang">
        {languages.map(({ code, name, country_code }) => (
          <li key={country_code}>
            <h4 
                onClick={()=>{
                  i18next.changeLanguage(code);
                  changeStyle(code)
                }} 
                className={active===code && "active" }>
                  {name}
            </h4>
          </li>
        ))}
      </ul>
    </>
  );
}

相关问题