我正在研究 Laravel 和 reactJS,我正在为 Shopify 创建一个应用程序。我正在使用Polaris 数据表来显示数据。一切正常,但现在我必须根据单元格值更改单元格的颜色。对于数据表,我进行了 API 调用,并从 laravel 控制器中获取了一个数据数组。要更改单元格值,我必须编辑该数组。下面是我从控制器发送的数组。
let data =[
["#1007", "14-04-2021", "dummy name 1", "Approved"],
["#1012", "14-04-2021", "dummy name 2", "Rejected"],
["#1013", "14-04-2021", "dummy name 3", "Approved"],
["#1014", "14-04-2021", "dummy name 4", "Rejected"],
["#1015", "14-04-2021", "dummy name 5", "Approved"],
["#1016", "14-04-2021", "dummy name 6", "Approved"]
]
要更改单元格颜色,我必须修改此数组并将一些 HTML 添加到要编辑的单元格中,并根据单元格中的值更改颜色。
这是我正在尝试做的事情,我发现了这个用于更改单元格值的代码。
const customCellContent = (
<span style={{ display: "inline-flex" }}>
<Icon color="greenDark" source={CaretUpMinor} />
<TextStyle variation="positive">75.00%</TextStyle>
</span>
);
const rows = [["Gonzalo", 4, "100%", customCellContent]];
下面是我用来将数据显示到数据中的完整反应 js 代码
import React, {useState, useEffect, useCallback} from 'react';
import {Switch, Route, Link} from "react-router-dom";
import axios from "axios";
import {Card, DataTable, Page, Spinner} from '@shopify/polaris';
import Test from './test'
export default function Orders() {
const [sortedRows, setSortedRows] = useState(null);
const [orders, setorders] = useState(null);
const [showSpinner, setShowResults] = useState(true);
useEffect(() => {
const fetchUsers = async () => {
try {
const store_orders = await axios.get('/store_orders');
const get_orders = await axios.get('/get_orders');
setorders(get_orders.data);
setShowResults(false);
} catch (e) {
console.log(e);
}
};
fetchUsers();
}, []);
const initiallySortedRows = orders;
const rows = sortedRows ? sortedRows : initiallySortedRows;
const handleSort = useCallback(
(index, direction) => setSortedRows(sortCurrency(rows, index, direction)),
[rows],
);
return (
<div>
<div className="tableContainer">
{ showSpinner ? <div className="polarisSpinner"><Spinner accessibilityLabel="Spinner example" size="large" className="polarisSpinner"/></div> :
<Card>
<DataTable
columnContentTypes={[
'text',
'text',
'text',
'text',
]}
headings={[
'Order',
'Date',
'Customer',
'Status',
]}
rows={rows}
/*sortable={[false, true, false, false, true]}*/
defaultSortDirection="descending"
initialSortColumnIndex={4}
onSort={handleSort}
/>
</Card> }
</div>
</div>
);
function sortCurrency(rows, index, direction) {
return [...rows].sort((rowA, rowB) => {
const amountA = parseFloat(rowA[index].substring(1));
const amountB = parseFloat(rowB[index].substring(1));
return direction === 'descending' ? amountB - amountA : amountA - amountB;
});
}
}