Почему в массиве undefined?

мой код

https://codesandbox.io/s/focused-thompson-w7v9c2?file=/index.tsx

<Formik
        initialValues = {initialValues}
        onSubmit = {async (values) => {
          await new Promise((r) => setTimeout(r, 500));
          // alert(JSON.stringify(values, null, 2));
          values.product.map((item, i: number) => {
            let qty: number[] = [];
            console.info(i + "-------qty------");
            console.info(item.qty);
            console.info(i + "-------price------");
            console.info(item.price);

            if (item.qty! && item.price!) {
              qty[i] = item.qty * item.price;

              console.info(qty);
            }
              const result = qty.reduce((sum, number) => {
                return sum + number;
              }, 0);
              setSum(result)
            console.info("-------result------");
            console.info(result);

            console.info("-------Sum------");
            console.info(sum);
            console.info("-------langth------");
            console.info(i);
          });
        }}
      >

Я добавил цену и количество в непрерывный массив. и мне нужно price + qty в сочетании, но результат массив [ undefined, 30] или [undefined,undefined ,40] Когда я добавляю данные в массив, я хочу записать const [sum, setSum] = useState(0)

используйте эту проверку перед картой {array && array.map (ele => <>{ele} </>)

zain ul din 26.12.2022 10:57

использование операторов && помогает в этом случае, но если это ложно, он возвращает 0, что некрасиво для пользовательского интерфейса, вместо этого используйте ? вот так - {массив? array.map (ele => <>{ele} </> : "это лучше")

goga iosebashvili 26.12.2022 11:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
2
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

ваше условие if неверно. заменить это

        if (item.qty! && item.price!) {

с этим

        if (!item.qty && !item.price) {
Ответ принят как подходящий

Вы устанавливаете sum для каждого продукта на каждой итерации. Вы можете прочитать: уменьшить и карту.

<Formik
        initialValues = {initialValues}
        onSubmit = {async (values) => {
          await new Promise((r) => setTimeout(r, 500));
          // alert(JSON.stringify(values, null, 2));
          const result = values.product.reduce((sum, p) => {
                return sum + p.qty * p.price;
              }, 0);
          setSum(result)
          
            console.info(result);

          });
        }}
      >

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