javascript 在react中隐藏div(如果其中没有锚标签)

py49o6xq  于 2023-02-02  发布在  Java
关注(0)|答案(7)|浏览(141)

我有一个react code(just a snippet, its not a complete code)如下所示,显示了网页上的程序列表。Line A在下面的React代码呈现网页上的所有程序列表。

    • React代码**:
const renderPrograms = () => {
    return programs.map((program, index)=>{
        return (
            <a href={program.url} key={index}>
                <div className="program" >
                    <div class="hello-world">{program.name}</div>
                </div >
            </a>
        )
    })
}

return(
<div class="parent-div">
    <div className ="pqr-xyz">  
        <h5>Hello World</h5>            
    </div>
    <div className ="abc-def">  
        <h5>Programs</h5>
        {programs && renderPrograms()}   {/*Line A*/}
    </div>
</div> 
)

上述react代码在运行时呈现以下html代码

<div class="parent-div">
    <div className ="pqr-xyz">  
        <h5>Hello World</h5>            
    </div>
    <div class="abc-def">
       <h5>Programs</h5>
       <a href="https://www.google.com/">
            <div class="program">  
              <div class="hello-world">TYUV</div>
            </div>
       </a>
       <a href="https://www.twitter.com/">
            <div class="program"> 
              <div class="hello-world">SGHS</div>
            </div>  
       </a>
    </div>
</div>
    • 问题陈述:**

Line A不呈现任何内容时,我的div(<div className ="abc-def">)在运行时将如下所示:

<div class="abc-def">   
  <h5>Programs</h5>
</div>

我想知道我需要在上面的react代码中做些什么修改,这样当A行不呈现任何内容时,<div class="abc-def"><h5>Programs</h5></div>就不会显示在网页上。

jbose2ul

jbose2ul1#

它们应该是条件的一部分:

return(
    programs.length > 0 && <div className ="abc-def">  
        <h5>Programs</h5>
        {renderPrograms()} 
    </div>
)

我更改了条件以检查长度,否则,当为空时,您将得到0而不是空值

wz8daaqr

wz8daaqr2#

尝试更改以下行:

<div className ="abc-def">  
        <h5>Programs</h5>
        {programs && renderPrograms()}   {/*Line A*/}
    </div>

变成这样:

{ programs && ( 
        <div className ="abc-def">  
            <h5>Programs</h5>
            {renderPrograms()}   {/*Line A*/}
        </div>
    ) }

现在没有程序什么都不显示。

cetgtptt

cetgtptt3#

您可以尝试像这样添加className:

<div className={`abc-def ${programs.length ? "hidden" : ""}`}

或者从父组件中,可以选择不使用<div>呈现此组件

dohp0rv5

dohp0rv54#

除了尝试使用CSS隐藏它之外,您还可以通过从函数中不返回任何内容来选择根本不呈现它

const RenderPrograms = ({ programs = [] }) => {

  if (!programs.length) {
    return []
  }

  return (
    <div className="abc-def">
      <h5>Programs</h5>
      {programs.map((program, index) =>
        <a href={program.url} key={index}>
          <div className="program">
            <div>{program.name}</div>
          </div>
        </a>
      )}
    </div>
  )
}

ReactDOM.render(
  <RenderPrograms />,
  document.getElementById('react')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react"></div>
5t7ly7z5

5t7ly7z55#

您可以尝试将类放在模板字符串中,并使用三元运算符在某些状态值为真时显示某个类。

<div className={`${stateValue ? "name-of-class-with-hide" : "abc-def"}`}>
v09wglhw

v09wglhw6#

下面是一个完整的解决方案,您所需要做的就是将<h5>Programs</h5>移到条件中,并稍微修改条件,如下面的代码片段所示。

<div className ="abc-def">  
        {
            programs.length > 0 && (
               <div>
                 <h5>Programs</h5>
                 <RenderPrograms programs = {programs}/>
               </div>
            )
        }
    </div>

注意,我还修改了RenderPrograms函数以接受参数。
以下是完整的片段。
x一个一个一个一个x一个一个二个x

bwitn5fc

bwitn5fc7#

你需要把程序的渲染移到RenderPrograms组件中。使RenderPrograms组件purelu具有功能性,并通过props(而不是使用function)将数据传递给它。

const RenderPrograms = ({ programs }) => {
  let disp = programs.map((program, index) => {
    return (
      <a href={program.url} key={index}>
        <div className="program">
          <div class="hello-world">{program.name}</div>
        </div>
      </a>
    );
  });

  return disp || <span />;
};

然后使用RenderPrograms渲染main组件中的程序(带有logis的组件用于加载程序)。

// let programs = [
  //   {
  //     url: "test1.com",
  //     name: "test1"
  //   },
  //   {
  //     url: "test2.com",
  //     name: "test2"
  //   }
  // ];

  let programs = [];

  return (
    <div className="App">
      <div class="parent-div">
        <div className="pqr-xyz">
          <h5>Hello World</h5>
        </div>
        <div className="abc-def">
          <h5>Programs</h5>

          <RenderPrograms programs={programs} />
          {/* {programs && renderPrograms()} Line A */}
        </div>
      </div>
    </div>
  );

您可以随意使用此sandbox

相关问题