javascript - 单击按钮时有条件地渲染组件(React)

标签 javascript reactjs

我创建了一个基本的 React 项目,它从 SQL 服务器提取数据。我希望能够根据单击的按钮有条件地呈现。

这是我的显示用户组件,在我的 AdminViewUsers 组件中使用(实际显示用户的组件)。

import React, { Component } from 'react';
import './customers.css';

class DisplayUsers extends React.Component{
  constructor(){
    super();

    this.state= { users: [] } 
  }
  componentDidMount(){
   this.setState({
      users: this.getItems()
   })
  }

  getItems(){
fetch('/admin-view-users')
.then(recordset => recordset.json())
.then(results => { console.log(results.recordset); this.setState({'users': results.recordset}); });

  }

  render () {

    console.log(this.state.users)
    return (
    <ul>
      {this.state.users && this.state.users.map(function(user, index){

        //if (user.severity === 1){          
        return(
          <div className ="jumbotron">
        <li>
          Severity: {user.severity}
        </li>
        <li>
          <p>User Name:{user.name} </p>
        </li>

        <li>
        User Email: {user.email}
        </li>
        <li>
          Description of Issue: {user.description} 
          </li>
          <button>See Details</button>
          </div>
        )
        })
         } 
     </ul>   
    );    
  }
}

export default DisplayUsers; 

这是我的 AdminViewUsers 组件

import logo from '../codestone logo.png';
import {Link } from 'react-router-dom'
import '../bootstrap.min.css'

import '../bootstrap.min.css'
import '../App.css'

import  Customers  from "../Components/customers";
import  DisplayUsers  from "../Components/DisplayUsers";

import { ButtonDropdown, DropdownToggle, DropdownMenu, DropdownItem, DropDownButton } from 'reactstrap';

function Home() {
  return (

      <div> 
        <Header/>
        <SeveritySelector/>
        <DisplayUsers/>
     </div>
  );
}

function Header(){
    return (
      <div class="jumbotron">
        <div className = "User-Menu">
      <Link>User details  </Link>
      </div>
      <img className='profile-image' alt='icon' src={logo} width="340" height="60"/>
     <Navigation/>
    </div>
      )
    }

    function Navigation (){
      return(
        <div>
          <br/>
          <div class="btn-group">
     <Link to= '/home'><button type="button" class="btn btn-light">Home</button></Link>
     <Link to= '/admin-view-users'><button type="button" class="btn btn-light">View Users(Admin)</button></Link>
    </div>
      </div>
      )
    }

    function SeveritySelector (){
      return(
         <div className = "Severity-Toolbar">
        <div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups">
        <div class="btn-group mr-2" role="group" aria-label="First group">
        <button type="button" class="btn btn-secondary">Severity High</button>
        <button type="button" class="btn btn-secondary">Severity Medium</button>
       <button type="button" class="btn btn-secondary">Completed</button>
       <button type="button" class="btn btn-secondary">View All</button>
  </div>
        </div>
        </div>
      )
    }

  export default Home;

本质上,我想使用功能严重性选择器来决定如何显示语句。例如,如果选择高严重性按钮,那么它将显示所有具有高严重性(1)的内容,如果选择中等则显示所有中等严重性严重性 (2) 并完成,严重性为 3。最后一个按钮显示全部。

您认为最好的方法是什么?我知道我可以在“server.js”中使用多个语句并加载不同的查询并将它们连接到不同的页面。

但是有没有一种方法可以让我只使用 if 语句或类似的东西来确定选择哪个按钮以避免与服务器进行多个事务?您可以看到我在显示用户中使用 if 语句进行的简短尝试,该语句有效但不依赖于按钮。

最佳答案

条件渲染可以使用多种技术来实现,最常用的是括号样式变体。可以通过以下方式使用:

function Header(){
    const showFirst = true;

    return (
      <div class="jumbotron">
         {showFirst && <MyFirstComponent />}
         {!showFirst && <MySecondComponent />}
       </div>
      )
    }

这将渲染 <MyFirstComponent />如果showFirst为 true 并将显示 <MySecondComponent />如果是假的。

关于javascript - 单击按钮时有条件地渲染组件(React),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59545049/

相关文章:

javascript - API 响应是数组的数组。第一个数组是对象键值对中的键

javascript - 在 React 中构建大型列表时 UI 滞后几秒钟

reactjs - 状态更新时样式不更新

php - 我想使用图形对象在 Facebook 上分享我们的应用程序

javascript - 如何在 Gatsby 中使用像 Font Awesome 这样的图标

javascript - 如何从vimeo获取专辑列表

CSS 模块在部署到 Firebase 时没有为我的应用设计样式。创建 React 应用程序

javascript - 如何使用reactjs验证对象数组

Reactjs Material UI 如何为对话框组件设置较低的 z-index

javascript - 使用Jquery显示Div中其他三个元素中元素的最大宽度