Я делаю список дел и хочу сделать функцию, которая меняет задачи по их приоритетам. Например:
Идти в тренажерный зал
Научитесь реагировать
Я хочу сделать кнопку, которая перемещает элементы вверх и вниз и получает:
Научитесь реагировать
Идти в тренажерный зал
У меня есть функция, которая, я уверен, работает правильно, но я думаю, что проблема в <div>, где я использую эту функцию.
const moveUpDown = (currentIndex, nextIndex) =>{
const newCounts = [...todos]
const currentCounts = newCounts[currentIndex]
const previousCounts = newCounts[nextIndex]
newCounts[currentIndex] = previousCounts
newCounts[nextIndex] = currentCounts
setTodos(newCounts)
}
Это мое возвращение:
function ToDo(props) {
return (
<div key = {props.todo} className = "item-todo">
<div
className = {props.todo.complete ? "item-text strike" : "item-text"}
onClick = {() => props.toggleTask(props.todo.id)}
>
{props.todo.task}
</div>
<div className = "item-delete" onClick = {() => props.removeTask(props.todo.id)}>
X
</div>
// Lines below I'm using function moveUpDown
<div
className = "item-moveUpDown" disabled = {props.todo === 0} onClick = {() => props.moveUpDown(props.todo, props.todo - 1)}
>
Up
</div>
<div
className = "item-moveUpDown" disabled = {props.todo === 0} onClick = {() => props.moveUpDown(props.todo, props.todo + 1)}
>
Down
</div>
</div>
)
}
Параметры, которые вы передаете moveUpDown
, не имеют смысла — похоже, что они должны быть числами, но вы передаете props.todo
, который является объектом.
Возможно, если бы вы изменили функцию moveUpDown
, чтобы принять «дело», которое вы хотите переместить, и дельту, чтобы указать, в каком направлении вы хотите его переместить; например:
const moveUpDown = (todo, delta) =>{
const newCounts = [...todos];
// Remove from the array
const currentIndex = newCounts.indexOf(todo);
newCounts.splice(currentIndex, 1);
// Now put it back in at the new position
newCounts.splice(currentIndex + delta, 0, todo);
setTodos(newCounts)
}
Теперь вы можете изменить своих абонентов, например:
<div
className = "item-moveUpDown"
disabled = {props.todo === 0}
onClick = {() => props.moveUpDown(props.todo, 1)}
>
Down
</div>
Также обратите внимание, что ваш атрибут disabled
не имеет смысла — props.todo
— это объект, поэтому он никогда не будет равен нулю. Возможно, вам следует передать индекс элемента списка задач как отдельное свойство?