Как выделить строку на основе другого условия строки в react jsx?

#javascript #reactjs #frontend #jsx

#язык JavaScript #реагирует на #внешний интерфейс #jsx

Вопрос:

Мне нужно выделить строки красным цветом, если значение коэффициента (столбца) равно или больше 0,96. Я не был уверен, куда добавить строки, чтобы внести эти изменения. Кто-нибудь может мне в этом помочь? Я пытаюсь выделить строки красным цветом, где условие удовлетворяет. т. е. если значение коэффициента больше или равно 0,96.

Вот код, который у меня есть:

 import React, { useState, useContext } from "react"; import { AppContext } from "../../context/AppContext"; import { getCostSales} from "../../API/api"; import Button from "react-bootstrap/Button"; import Table from "react-bootstrap/Table";  const CostSales = () =gt; {  const {  userRole,  employee,  setUserRole,  setEmployee,  isLoggedIn,  setIsLoggedIn  } = useContext(AppContext);   const [tableData, setTableData] = useState([]);   // TODO: conditional render for table? or can show table headers at least?  const onHandleRunCostSales = () =gt; {  //call API/api method here  console.log("Run below cost sales report clicked:");  getCostSales().then((res) =gt; {  if (res) {  setTableData(res);  console.log("res in below cost sales report: ", res);  }  });  };  return (  lt;divgt;  {userRole === "Manager" || userRole === "Owner" ? (  lt;divgt;  lt;Button variant="primary" onClick={onHandleRunCostSales}gt;  Run Report  lt;/Buttongt;  {tableData ? (  lt;divgt;  lt;Tablegt;  lt;theadgt;  lt;trgt;  lt;thgt;Vinlt;/thgt;  lt;thgt;Datelt;/thgt;  lt;thgt;Invoice Pricelt;/thgt;  lt;thgt;Sold Pricelt;/thgt;  lt;thgt;Ratiolt;/thgt;  lt;thgt;Customer Namelt;/thgt;  lt;thgt;SalesPersonlt;/thgt;  lt;/trgt;  lt;/theadgt;  lt;tbodygt;  {tableData.map((rowData, index) =gt; (  lt;trgt;  lt;tdgt;{rowData.vin}lt;/tdgt;  lt;tdgt;{rowData.date}lt;/tdgt;  lt;tdgt; {rowData.invoice_price} lt;/tdgt;  lt;tdgt;{rowData.sold_price}lt;/tdgt;  lt;tdgt;{rowData.ratio}lt;/tdgt;  lt;tdgt;{rowData.customer_name}lt;/tdgt;  lt;tdgt;{rowData.salesperson}lt;/tdgt;  lt;/trgt;  ))}  lt;/tbodygt;  lt;/Tablegt;  lt;/divgt;  ) : (  lt;divgt;  lt;pgt;No data available for reportlt;/pgt;  lt;/divgt;  )}  lt;/divgt;  ) : (  lt;divgt;  lt;pgt;Sorry, we can't show you this pagelt;/pgt;  lt;/divgt;  )}  lt;/divgt;  ); };  export default CostSales;  

Ответ №1:

Вы можете добавить условный стиль для tr элемента на основе соотношения

Обновление: вы можете использовать метод util для выбора цвета на основе рациона

 function highlightColor(ratio) {  if (ratio gt; 0.98) {  return "green";  } else if (ratio gt;= 0.96) {  return "red";  }  return "white"; }  lt;tbodygt;  {tableData.map((rowData, index) =gt; (  lt;tr style={{ backgroundColor: highlightColor(rowData.ratio) }}gt;  lt;tdgt;{rowData.vin}lt;/tdgt;  lt;tdgt;{rowData.date}lt;/tdgt;  lt;tdgt; {rowData.invoice_price} lt;/tdgt;  lt;tdgt;{rowData.sold_price}lt;/tdgt;  lt;tdgt;{rowData.ratio}lt;/tdgt;  lt;tdgt;{rowData.customer_name}lt;/tdgt;  lt;tdgt;{rowData.salesperson}lt;/tdgt;  lt;/trgt;  ))} lt;/tbodygt;;  

Комментарии:

1. Спасибо за ответ. Ладно, если бы у меня было еще одно условие. Скажем, если соотношение больше 0,98, выделите зеленый цвет. Как мне это сделать?

2. @emma19, Обновил ответ. вы можете использовать вспомогательный метод для определения цвета.

3. Кроме того, дата указана в метке времени unix, например: 1607110465663 есть ли способ преобразовать ее в формат даты и времени?

4. Ts Unix — это секунды, поэтому переводите в миллисекунды. новая дата(ts * 1000), будет иметь дату js