Не удалось выполнить removeChild при появлении ошибки "Node" при использовании setState в React
Итак, я пытаюсь заменить компонент на два уровня выше. Я использую перетаскивание для изменения состояния "клиенты", когда перетаскиваю элемент из одного контейнера в другой.
this.state = {
clients: {
backlog: clients.filter(client => !client.status || client.status === 'backlog'),
inProgress: clients.filter(client => client.status && client.status === 'in-progress'),
complete: clients.filter(client => client.status && client.status === 'complete'),
},
drake: dragula({ revertOnSpill: true })
}
Я добавил все необходимые контейнеры с помощью тега ref в свой JSX, и функция перетаскивания работает, так что проблема не в этом. Я использую приведенную ниже функцию в компоненте, который был смонтирован.
this.state.drake.on("drop", (el, target, source) => {
this.handleDrop(el,target,source)
})
Далее я использую handleDrop
функция для:
- Проверьте, отличается ли целевой контейнер от исходного.
- Получите атрибут data-id перемещаемого элемента карты.
- Получите всех клиентов.
- Получите предыдущий статус клиента из перемещаемого элемента карты, чтобы я мог изменить соответствующую часть объекта клиентов в состоянии.
- Замените соответствующий статус переменной клиентов.
- Превратите его в объект и установите с ним состояние.
handleDrop(el, target, source) {
if (target === source) {return}
let cardID = el.getAttribute("data-id")
const targetStatus = this.getTargetStatus(target)
let clients = this.getClients()
let prevClientStatus = el.getAttribute("data-status")
if (!prevClientStatus) {
prevClientStatus = 'backlog'
} else if (prevClientStatus === 'in-progress') {
prevClientStatus = 'inProgress'
}
for (let i = 0; i < clients.length; i++) {
if (cardID === clients[i].id) {
clients[i].status = targetStatus
let clientsState = {
backlog: clients.filter(client => !client.status || client.status === 'backlog'),
inProgress: clients.filter(client => client.status && client.status === 'in-progress'),
complete: clients.filter(client => client.status && client.status === 'complete'),
}
this.setState({
clients: {
backlog: clientsState.backlog,
inProgress: clientsState.inProgress,
complete: clientsState.complete
}
})
break
}
}
}
Я протестировал весь код для изменения clientsState
объектная переменная и выводит на консоль правильное значение. Проблема не в этом.
После запуска этого кода появляется следующая ошибка:
×
NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
102 | inProgress: clients.filter(client => client.status && client.status === 'in-progress'),
103 | complete: clients.filter(client => client.status && client.status === 'complete'),
104 | }
> 105 | this.setState({
| ^ 106 | clients: {
107 | backlog: clientsState.backlog,
108 | inProgress: clientsState.inProgress,
Это сводит меня с ума, и я потратил 4 дня, пытаясь понять, в чем проблема. Я был бы признателен за любую помощь, потому что я в своем уме.