#react-hooks
Вопрос:
Следующий код предназначен для извлечения сведений о компании из MongoDB и отображения их в табличном формате. Кроме того, я разместил строку поиска, в которой можно искать компанию по названию компании, я использовал крючки react для реализации этой функции. Я хочу знать, как отображать сообщение об ошибке при неверном поиске вместо отображения пустой таблицы всякий раз, когда выполняется неверный поиск.
import React, {useEffect, useState} from "react";
import GridWrapper from "../helpers/gridWrapper";
import ContentWrapper from "../helpers/contentWrapper";
import Popup from "./contacts/popupTemplate";
import EditIcon from '@material-ui/icons/Edit';
import DeleteIcon from '@material-ui/icons/Delete';
import ViewIcon from "@material-ui/icons/EditOutlined";
import "./stylesheets/contacts.css"
import { useDispatch } from "react-redux";
import { useSelector } from "react-redux";
import { getCompanies } from "../redux/actions/companyAction";
const Contacts = () => {
const dispatch = useDispatch();
useEffect(() => {
dispatch(getCompanies());
},[dispatch]);
const { companies } = useSelector(state => state.companies);
//for popup management
const [buttonPopup, openPopup] = useState(false);
let count = 1;
const[search, setSearch] = useState("");
const filteredCompanies = companies.filter(company=>{
return company.companyName.toLowerCase().includes(search.toLowerCase())
})
return (
<GridWrapper>
<ContentWrapper>
<div>
<input
type="text"
placeholder="Search Contacts"
class="boxContainer"
onChange={e => setSearch(e.target.value)}>
</input>
</div>
<Popup trigger={buttonPopup} setTrigger={openPopup}>
<div className="row">
<div className="column1">
<h4>
Details of Client
</h4>
<div className="column1-part1">
<div className="column1-part1-column">
Id : 10235
<br></br>
Name : John Smith
<br></br>
Company Name : Company ABC
</div>
<div className="column1-part1-column2">
Contact Number : 0774410398
<br></br>
Company Telephone : 0112937148
<br></br>
Email : example@gmail.com
</div>
</div>
<div className="column1-part2">
Client Job : Sales Head
<br></br>
Client NIC : 1958426712V
<br></br>
Client Address : No 15, First lane, Colombo
<br></br>
Client DOB : 25th June 2021
<br></br>
Client Gender : Male
</div>
<div className="column1-part3">
Company Address : No 15, First lane, Colombo
<br></br>
Company Registration Number : 256364125895
</div>
</div>
<div className="column2">
<button className="ClientEditBtn">
<EditIcon></EditIcon>
</button>
<button className="ClientDeleteBtn">
<DeleteIcon></DeleteIcon>
</button>
<h5>
Current Projects
</h5>
<p>
Project 1 - 25/06/2021
<br></br>
Project 256 - 27/06/2022
<br></br>
Project 256 - 27/06/2022
<br></br>
Project 256 - 27/06/2022
</p>
</div>
</div>
</Popup>
<div class="table-box">
<table>
<thead>
<tr>
<th>No.</th>
<th>Registration No.</th>
<th>Company Name</th>
<th>Company Address</th>
<th></th>
</tr>
</thead>
<tbody>
{filteredCompanies.map(company =>(
<tr>
<td>{count }</td>
<td>{company.companyRegNumber}</td>
<td>{company.companyName}</td>
<td>{company.companyAddress}</td>
<td><button onClick={() => openPopup(true)} class="btn-view"><ViewIcon/>View</button></td>
</tr>
))}
</tbody>
</table>
</div>
</ContentWrapper>
</GridWrapper>
);
};
export default Contacts;
Ответ №1:
Если вы возьмете этот фрагмент из своего jsx:
<tbody>
{filteredCompanies.map(company =>(
<tr>
<td>{count }</td>
<td>{company.companyRegNumber}</td>
<td>{company.companyName}</td>
<td>{company.companyAddress}</td>
<td><button onClick={() => openPopup(true)} class="btn-view"><ViewIcon/>View</button></td>
</tr>
))}
</tbody>
Вы можете изменить это так, что-то вроде этого:
{filteredCompanies?.length >0?
<tbody>
{filteredCompanies.map(company =>(
<tr>
<td>{count }</td>
<td>{company.companyRegNumber}</td>
<td>{company.companyName}</td>
<td>{company.companyAddress}</td>
<td><button onClick={() => openPopup(true)} class="btn-view"><ViewIcon/>View</button></td>
</tr>
))}
</tbody>
: <div> <i>No companies found.</i> </div>}
Встроенное условие либо отобразит ваши tbody
, если отфильтрованные компании не пусты, либо отобразит "No companies found"
сообщение.
Комментарии:
1. Поскольку я не использую JSX, этот код показывает ошибки, можете ли вы предоставить альтернативный код для JS
2. @AngelaRaveendraraj закрывающий тег
</i>
был неправильным. Код работает сейчас, я его протестировал.