gpt4 book ai didi

javascript - 如何使用 ReactJS 以两种方式使表中的列可排序

转载 作者:行者123 更新时间:2023-11-30 07:01:57 25 4
gpt4 key购买 nike

我正在 ReactJS 中构建一个简单的应用程序,它通过调用某个 API 使用 JSON 数组。然后我将数组的结果填充到一个表中。我现在想让表格的列可排序。我最理想的是同时进行升序和降序排序。一旦我在标题按升序排序时单击标题,它应该按降序排序,反之亦然。这是我的代码。

class ParentComponent extends Component {
constructor(props) {
super(props);
this.state = { data: [] };
}

componentDidMount() {
fetch("http://hostname:xxxx/yyyy/zzzz")
.then(function(response) {
return response.json();
})
.then(items => this.setState({ data: items }));
}

render() {
var newdata = this.state.data;

return (
<table className="m-table">
<thead>
<tr>
<th>AccountName</th>
<th>ContractValue</th>
</tr>
</thead>
<tbody>
{newdata.map(function(account, index) {
return (
<tr key={index} data-item={account}>
<td data-title="Account">{account.accountname}</td>
<td data-title="Value">{account.negotiatedcontractvalue}</td>
</tr>
);
})}
</tbody>
</table>
);
}
}

export default ParentComponent;

最佳答案

您可以使用 columndirection 属性将 sort 属性添加到您的状态:

state = {
data: [],
sort: {
column: null,
direction: 'desc',
},
};

当然你也应该有一个像这样的排序处理程序:

onSort = (column) => (e) => {
const direction = this.state.sort.column ? (this.state.sort.direction === 'asc' ? 'desc' : 'asc') : 'desc';
const sortedData = this.state.data.sort((a, b) => {
if (column === 'accountName') {
const nameA = a.accountName.toUpperCase(); // ignore upper and lowercase
const nameB = b.accountName.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}

// names must be equal
return 0;
} else {
return a.contractValue - b.contractValue;
}
});

if (direction === 'desc') {
sortedData.reverse();
}

this.setState({
data: sortedData,
sort: {
column,
direction,
}
});
};

我从 MDN 得到排序.

这是一个样本笔:https://codepen.io/anon/pen/xrGJKv

关于javascript - 如何使用 ReactJS 以两种方式使表中的列可排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com