Реагируют крючки, передавая индекс array.map в качестве реквизита, не определен

#javascript #arrays #reactjs #react-hooks

Вопрос:

У меня есть эта страница приложения create-react, prioritessearch, в котором есть массив (приоритеты) как часть его состояния. Я сопоставляю каждый индекс массива (priorityObj) с компонентом, подобным этому:

 priorities.map((priorityObj, idx) => <PriorityObjComp key={idx} priorityIndex={idx} priorityObj={priorityObj} addNewPriority={addNewPriority} />
 

Каждый приоритетный объект выглядит следующим образом:

 {
    "id": 0,
    "highPriority": [""],
    "medPriority": [""],
    "lowPriority": [""],
    "group": "",
}
 

Компонент имеет две функциональные возможности. Во-первых, просто сопоставьте каждое значение объекта приоритета, снова сопоставив массивы «Приоритет» с простым тегом абзаца. Во-вторых, следует перейти к форме полей, в которых значение по умолчанию/заполнитель являются текущими значениями. Снова сопоставление массивов «Приоритетов» с большим количеством полей.

Теперь я также хочу, чтобы пользователи могли добавлять пустое поле и удалять поля для каждого массива «Приоритет», когда компонент находится во второй форме (входы).

Моя первоначальная идея состояла в том, чтобы передать функцию «addNewPriority» со страницы «Поиск приоритетов» в качестве поддержки. Вот он:

 const addNewPriority = (type, key) => {
        if(type==="high") priorities[key].priorityObj.highPriority.push("");
        if(type==="med") priorities[key].priorityObj.medPriority.push("");
        if(type==="low") priorities[key].priorityObj.lowPriority.push("");

    }
 

В каждом из разделов массива «Приоритет» в компоненте есть кнопка с чем-то вроде onClick={() => addNewPriority("high", priorityIndex)} . Идеально вставить пустую строку в массив приоритета объекта PriorityObject, чтобы она отображалась на вход, как и другие члены массива.

Однако приоритетное выражение, переданное прямо здесь при создании компонента: const PriorityObjComp = ({ priorityIndex, priorityObj, addNewPriority }) , всегда не определено…

Если у вас есть способ получить индекс или какие-либо другие решения общей проблемы, мы будем вам очень признательны.

Комментарии:

1. Немного сложно следить за tbh. Я бы рекомендовал вам поместить это в песочницу и создать минимальный воспроизводимый пример. Кроме этого, я полагаю, что вы обновляете массив приоритетов, изменяя его состояние, которое не вызовет нового рендеринга, следовательно, не будет отображать новые записи.