【发布时间】:2020-10-08 11:59:04
【问题描述】:
我正在创建一个使用箭头来显示排序是升序还是降序的表格。问题是,当我单击一列上的箭头时,所有箭头都会移动。我想点击特定箭头的位置只会改变我点击的列的方向。我正在尝试将单击的箭头与 th 的键值的名称相匹配,我已经在这个逻辑上工作了一段时间,但似乎无法理解。有人能指出我正确的方向吗
代码
const sortTable = (key) => {
setSortDirection(!sortDirection);
const clonedOptions = [...listOfOptions];
clonedOptions.sort((a, b) => {
return sortDirection ? a[key] - b[key] : b[key] - a[key];
})
console.log(key)
setListOfOptions(clonedOptions);
const arrows = document.querySelectorAll('.fas')
arrows.forEach(arrow => {
if (sortDirection === true) {
arrow.classList.add('arrowup')
} else if (sortDirection === false) {
arrow.classList.remove('arrowup')
}
})
}
<table>
<thead>
<tr>
<th></th>
<th onClick={() => sortTable('clock')}>Date </th>
<th onClick={() => sortTable('name')}>Stock Name <span><i onClick={() => sortTable('name')} className="fas fa-sort-up"></i></span></th>
<th onClick={() => sortTable('price')}>Price Of Option <span><i onClick={() => sortTable('price')} className="fas fa-sort-up"></i></span></th>
<th onClick={() => sortTable('amountOfOptions')}>Number Of Options <span><i onClick={() => sortTable('amountOfOptions')} className="fas fa-sort-up"></i></span></th>
<th onClick={() => sortTable('totalAmountSpent')}>Total Amount Spent <span><i onClick={() => sortTable('totalAmountSpent')} className="fas fa-sort-up"></i></span></th>
<th onClick={() => sortTable('optionPriceSoldAt')}>Option Sold At <span><i onClick={() => sortTable('optionPriceSoldAt')} className="fas fa-sort-up"></i></span></th>
<th onClick={() => sortTable('amountOfOptionsSold')}>Options Sold <span><i onClick={() => sortTable('amountOfOptionsSold')} className="fas fa-sort-up"></i></span></th>
<th onClick={() => sortTable('totalProfit')}>Proft <span><i onClick={() => sortTable('totalProfit')} className="fas fa-sort-up"></i></span></th>
</tr>
</thead>
{listOfOptions.map((option) => {
return (
<tbody key={uuidv1()}>
<tr>
<td title="delete" onClick={() => deleteOption(option.id)}><span className="delete">x</span></td>
<td>{option.clock}</td>
<td>{option.name.toUpperCase()}</td>
<td>${option.price}</td>
<td>{option.amountOfOptions}</td>
<td>${option.totalAmountSpent.toFixed(2)}</td>
<td>${option.optionPriceSoldAt}</td>
<td>{option.amountOfOptionsSold}</td>
<td style={{ color: option.totalProfit >= 0 ? 'green' : 'red' }}>${option.totalProfit.toFixed(2)}</td>
</tr>
</tbody>
)
})}
</table>
【问题讨论】:
-
仅供参考,在函数开头调用
setSortDirection并不意味着sortDirection已在以下代码行中更新。它是异步的 -
@John Ruddell,嗨,这是什么意思?
-
我认为您的具体问题是围绕选择箭头的逻辑。
document.querySelectorAll('.fas')会给你所有的箭头。当你真的只想要一个。为什么不将活动过滤器存储在组件状态中并在确定要排序的行/要旋转的箭头时重用它?
标签: javascript reactjs html-table