#javascript #reactjs #sorting
Вопрос:
я создал таблицу, и теперь я могу сортировать несколько столбцов. я хочу, чтобы после нажатия определенной кнопки я получал символ увеличения на кнопке и символ уменьшения на кнопке, если нажать ее снова, ниже приведен мой код функции, которая изменяет столбец, а также направление, а также привел кнопки в качестве примера
function change(set){
let direction='asc';
if(sortOrder==='asc'){
direction='desc';
}
setSortBy(set);
setSortOrder(direction);
}
<table>
<th><button onClick={()=>change('name')}>
Name
</button></th>
<th><button onClick={()=>change('total')}>
Total
</button></th>
</table>
так что любой может показать мне, как я могу достичь этого
Комментарии:
1. Я правильно понял вопрос? Итак, если вы сортируете в порядке возрастания, это должно отображаться стрелкой вверх, иначе стрелкой вниз?
2. да,вы все правильно поняли, но это должно отображаться для конкретной колонки, на которую я нажал в данный момент
Ответ №1:
Для простой сортировки содержимого таблицы попробуйте data-table. Например: https://www.npmjs.com/package/react-data-table-component
Комментарии:
1. это не будет моим использованием, потому что мой вывод данных зависит от переключения пользователя, было бы лучше, если бы я мог закодировать эту функцию стрелки
Ответ №2:
Вы должны поддерживать порядок сортировки столбцов в состоянии. Когда вы нажимаете на столбец/кнопку, вы обновляете состояние, и изменения будут отражены в визуализации. Используйте атрибуты данных для идентификации столбцов/кнопок. И, если вы не используете отдельную библиотеку CSS для чего-либо еще в своем проекте, просто используйте стрелки unicode вверх/вниз.
const {useState} = React;
function Example() {
// Use an object to maintain the column sort order
const [order, setOrder] = useState({ name: 'asc', total: 'asc' });
function handleClick({ target }) {
// Instead of attaching a handler to each button,
// there is one on the table, and we simply need to check
// that the element we've clicked on is a button instead.
if (target.nodeName === 'BUTTON') {
// Grab the type (name, total etc) from the data attribute
const { dataset: { type } } = target;
// Set the state of the new order
setOrder(prev => {
const newOrder = prev[type] === 'asc' ? 'desc' : 'asc';
return { ...prev, [type]: newOrder };
});
}
}
// Return the arrows
function getArrow(order) {
if (order === 'asc') return '↑';
return '↓';
}
return (
<table onClick={handleClick}>
<th><button data-type="name">Name {getArrow(order.name)}</button></th>
<th><button data-type="total">Total {getArrow(order.total)}</button></th>
</table>
);
};
// Render it
ReactDOM.render(
<Example />,
document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="react"></div>
Комментарии:
1. изначально я хочу сохранить их все по умолчанию
2. Я не знаю, что это значит.