Почему я получаю ошибку Assignment to constant variable, хотя переменная была создана через let
Ошибка: createInteractionPanel.js:11 Uncaught TypeError: Assignment to constant variable. at deleteNote (createInteractionPanel.js:11:21) at HTMLImageElement. (createInteractionPanel.js:26:9)
Основной код:
import {activeNotesData} from "../../data/activeNotesData.js";
function findParentId(el) {
return el.parentNode.id
}
function deleteNote(id) {
activeNotesData = activeNotesData.filter(note => note.id !== id)
}
export const createInteractionPanel = (itemId) => {
let interactionPanel = document.createElement("div");
interactionPanel.setAttribute("id", itemId)
let deleteIcon = document.createElement("img");
deleteIcon.src = "images/garbageIcon.svg";
deleteIcon.className = "note-interaction-icon";
deleteIcon.addEventListener('click', function () {
deleteNote(findParentId(this))
});
interactionPanel.appendChild(deleteIcon);
return interactionPanel;
}
Создание объекта:
export let activeNotesData = [
{
id: 123,
name: 'Shopping list',
created: 'April 20, 2021',
category: 'Quote',
content: 'Tomatoes, bread',
dates: ''
},
{
id: Math.random() + Math.random(),
name: 'The theory of evolution',
created: 'April 27, 2021',
category: 'Thought',
content: 'The evolution The evolution The evolution',
dates: ''
},
{
id: Math.random() + Math.random(),
name: 'New Feature',
created: 'May 5, 2021',
category: 'Idea',
content: 'Implement new tomatoes, bread',
dates: ['3/5/2021', '5/5/2021']
}]
Ответы (1 шт):
В js нельзя напрямую изменять импортируемые переменные вне зависимости от способа их объявления (const или let). Однако, эти переменные можно изменять в самом модуле, который их экспортирует.
Подробное объяснение на английском
В данном случае, чтобы изменить activeNotesData, необходимо перенести функцию deleteNote из createInteractionPanel.js в activeNotesData.js (не забудьте добавить export), после чего импортировать её в createInteractionPanel.js вместе с activeNotesData.
P.S. Также, при фильтрации activeNotesData не забудьте привести note.id и id к одному типу, чтобы строгое неравенство note.id !== id работало как ожидается.
Я так понимаю, note.id у вас типа Number, а id, полученный с помощью функции findParentId, передается в функцию deleteNote с типом String.