У меня есть код ниже, где ввод является строкой. Ниже код работает нормально, и я не получаю ошибок компиляции -
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
соответственно.
Ну, похоже, вы фактически не используете деструктурированные предметы...
Ниже первой строки комментария вы эффективно используете data
, но не loading
, поэтому вам не следует деструктурировать loading
Ниже второй строки с комментариями вы снова деструктурируете data
и loading
, но переименовываете их, а затем не используете ни один из них.
Возможно, вы не поняли, что за пределами блока обратного вызова forEach они перестают существовать.
Да, я новичок в машинописи, поэтому мне не хватает этих мелких деталей. Если вы можете привести пример с моим кодом, это будет очень полезно.
К сожалению, трудно (невозможно) предоставить рабочий пример, не зная контекста и цели кода.
Не могли бы вы отредактировать код, чтобы он был автономным минимально воспроизводимым примером, подходящим для вставки в отдельную IDE для демонстрации вашей проблемы? В идеале вы должны удалить все внешние зависимости (например,
useGetCustomerOrdersByItemQuery
, но в вашем коде их больше). Если вы сделаете это и хотите, чтобы я взглянул еще раз, пожалуйста, упомяните @jcalz в комментарии.