@zakharoffam
Начинающий

Как передать объект во внутрь метода перебора массива?

Имеется вот такой кусок кода:
tasksData.infoTask.map((task) => (
  <Menu
    id="menu-per-team"
    anchorEl={engineerOfTeam}
    keepMounted
    open={Boolean(engineerOfTeam)}
    onClose={closeMenuPerTeam}
   >
    {mainInformation.userTeam[0].map((value) => (
        <MenuItem onClick={() => closeMenuPerTeam({
            ID: task.ID, // Сюда попадает значение последнего элемента массива task, а не той итерации в которой открывается данное меню.
            ROUTE_USER: value,
        })}>
    {value}
    </MenuItem>))}
   </Menu>


Проблема в том, что внутри метода mainInformation.userTeam[0].map используются данные task.ID из перебора верхнего уровня tasksData.infoTask.map. И почему то присваивается значение самого последнего индекса массива tasksData.infoTask, а не той итерации, в которой происходит выполнение кода.
Вопрос: как передать нужную task.ID в mainInformation.userTeam[0].map?
Если указать вот так tasksData.infoTask[0].ID то внутри перебора отображается все правильно, но если изменить на нужную итерацию tasksData.infoTask[task].ID, то вообще ошибка.
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
Krasnodar_etc
@Krasnodar_etc
fundraiseup
// Сделайте отдельный метод onClick
onClick = (task, value) => () => {
  closeMenuPerTeam({
            ID: task.ID,
            ROUTE_USER: value,
        })
}

{mainInformation.userTeam[0].map((value) => (
        <MenuItem onClick={ this.onClick(task, value) }>
    {value}
    </MenuItem>))}
   </Menu>


Таким образом вы:
1 - однозначно прокидываете task в хэндлер в момент отрисовки компонента, а не в момент вызова onClick, как было до этого (в чём и заключалась проблема)
2 - Избавляетесь от анонимной функции в onClick, погуглите почему не стоит так делать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы