如何使用功能组件在 ReactJS 中将 className 设置为 div

Posted

技术标签:

【中文标题】如何使用功能组件在 ReactJS 中将 className 设置为 div【英文标题】:How to set className to div in ReactJS using functional component 【发布时间】:2021-02-05 10:58:45 【问题描述】:

我有以下代码:

import React,  useState  from "react";
import "./styles.css";

export default function App() 
    const [border, setBorder] = useState(false);
    return (
        <div className="App">
            <div className="SectionTitleItem">Claimers</div>
            <div className="SectionTitleItem">Resources</div>
        </div>
    );

CodeSandbox

如何仅为活动项设置border-bottom

【问题讨论】:

看看react router 你如何定义哪个是活跃的? 如果项目被点击,那么它是活动的。有没有其他办法,我不想用react router 【参考方案1】:

App.js

import React,  useState  from "react";
import "./styles.css";

export default function App() 
  const [active, setActive] = useState(true);
  return (
    <div className="App">
      <div onClick=() => setActive(true) className=`SectionTitleItem$active ? " active" : ""`>Claimers</div>
      <div onClick=() => setActive(false) className=`SectionTitleItem$!active ? " active" : ""`>Resources</div>
    </div>
  );

styles.css

.App 
  font-size: 18px;
  margin: 40px 0 32px 0;
  display: flex;

.SectionTitleItem 
  margin-left: 50px;


.SectionTitleItem.active 
  border-bottom: 2px solid red;

【讨论】:

谢谢,但它只适用于第一项......当我点击第二项时,什么也没发生【参考方案2】:

可能是这样的

export default function App() 
  const [active, setActive] = useState(null);

  const getItemClassName = (name) => 
    if (name === active) 
      return "SectionTitleItem active";
    
    return "SectionTitleItem";
  ;
  
  return (
    <div className="App">
      <div
        onClick=() => setActive("claimers")
        className=getItemClassName("claimers")
      >
        Claimers
      </div>
      <div
        onClick=() => setActive("resources")
        className=getItemClassName("resources")
      >
        Resources
      </div>
    </div>
  );

.App 
  font-size: 18px;
  margin: 40px 0 32px 0;
  display: flex;


.SectionTitleItem 
  margin-left: 50px;


.SectionTitleItem.active 
  border-bottom: 2px solid red;

【讨论】:

以上是关于如何使用功能组件在 ReactJS 中将 className 设置为 div的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ReactJS 中将更改的状态从子组件传递给其父组件

如何在 ReactJS 中将数据从 API 渲染到表(函数组件)

如何在 React js 中将 props 传递给组件

如何在 ReactJS 中将纯文本转换为 html JSX

如何使用类对象在 Reactjs 中设置功能性无状态组件的样式

ReactJS - 如何在将数据发布到数据库后重新渲染功能组件