Почему я получаю ошибку 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 шт):

Автор решения: NameDropper

В 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.

→ Ссылка