Все деструктурированные элементы не используются

У меня есть код ниже, где ввод является строкой. Ниже код работает нормально, и я не получаю ошибок компиляции -

export const useViewCustomerOrderData = (id: string) => {
  const { data, loading } = useGetCustomerOrdersByItemQuery({
    variables: { itemId: Number(id) },
    skip: !id,
  })

  const poIds = (data?.getCustomerOrdersByItem?.map((p) => p?.customerOrderId).filter((poid): poid is number => Boolean(poid)) ?? [])

  const { data: customerData, loading: customerLoading } = useGetCustomerOrdersQuery({
    variables: { poIds },
    skip: !poIds.length,
  })

  const mapped: GridModel[] = customerData?.getCustomerOrders?.customerOrders?.map((p) => ({
    customerOrderId: p?.id ?? undefined,
    warehouse: p?.site?.name ?? undefined,
    startShipDate: p?.expectedShipDate ?? undefined,
    cancelShipDate: p?.expectedReceivedDate ?? undefined,
  })) ?? []

  return {
    data: mapped,
    loading: loading || customerLoading,
  }
}

Но из-за изменения дизайна мне нужно изменить ввод со строки на массив строк и перебирать идентификаторы для каждого цикла, но, поскольку я новичок в машинописном тексте, это вызывает проблемы с моей стороны. Вот что я пробовал, но выдает ошибку TS6198: All destructured elements are unused.

export const useViewCustomerOrderData = (ids: string[]) => {
  ids.forEach((id) => {
    // this gives error
    const { data, loading } = useGetCustomerOrdersByItemQuery({
      variables: { itemId: Number(id) },
      skip: !id,
    })

    const poIds = (data?.getCustomerOrdersByItem?.map((p) => p?.customerOrderId).filter((poid): poid is number => Boolean(poid)) ?? [])
    // this gives error too
    const { data: customerData, loading: customerLoading } = useGetCustomerOrdersQuery({
      variables: { poIds },
      skip: !poIds.length,
    })
  })
  // end of forEach loop

  const mapped: GridModel[] = customerData?.getCustomerOrders?.customerOrders?.map((p) => ({
    customerOrderId: p?.id ?? undefined,
    warehouse: p?.site?.name ?? undefined,
    startShipDate: p?.expectedShipDate ?? undefined,
    cancelShipDate: p?.expectedReceivedDate ?? undefined,
  })) ?? []

  return {
    data: mapped,
    loading: loading || customerLoading,
  }
}

Основная идея состоит в том, чтобы перебрать все идентификаторы и для каждого идентификатора вызвать функцию useGetCustomerOrdersByItemQuery, получить poIds и customerData соответственно.

Не могли бы вы отредактировать код, чтобы он был автономным минимально воспроизводимым примером, подходящим для вставки в отдельную IDE для демонстрации вашей проблемы? В идеале вы должны удалить все внешние зависимости (например, useGetCustomerOrdersByItemQuery, но в вашем коде их больше). Если вы сделаете это и хотите, чтобы я взглянул еще раз, пожалуйста, упомяните @jcalz в комментарии.

jcalz 19.11.2022 01:39
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Освоение принципов SOLID в JavaScript: Пошаговое руководство
Освоение принципов SOLID в JavaScript: Пошаговое руководство
Принцип единой ответственности (SRP): класс должен иметь только одну причину для изменения. Другими словами, у него должна быть только одна...
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Создание собственной системы электронной коммерции на базе Keystone.js - настройка среды и базовые модели
Прошлая статья была первой из цикла статей о создании системы электронной коммерции с использованием Keystone.js, и она была посвящена главным образом...
0
1
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, похоже, вы фактически не используете деструктурированные предметы...

Ниже первой строки комментария вы эффективно используете data, но не loading, поэтому вам не следует деструктурировать loading

Ниже второй строки с комментариями вы снова деструктурируете data и loading, но переименовываете их, а затем не используете ни один из них.

Возможно, вы не поняли, что за пределами блока обратного вызова forEach они перестают существовать.

Да, я новичок в машинописи, поэтому мне не хватает этих мелких деталей. Если вы можете привести пример с моим кодом, это будет очень полезно.

rosed 19.11.2022 02:04

К сожалению, трудно (невозможно) предоставить рабочий пример, не зная контекста и цели кода.

subparry 19.11.2022 02:06

Другие вопросы по теме