React array.splice вызывает метод несколько раз подряд

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

Однако, когда я ставлю отладчик, всякий раз, когда он достигает строки с

const [removed] = ...

Он возвращается к вызову функции и несколько раз вызывает / отображает функцию повторной загрузки. После этого tempArray пуст, хотя массив карт никогда не бывает пустым.

Если я удалю эту строку, tempArray не будет пустым и будет таким же, как массив карт. Однако в этой строке tempArray всегда пуст.

Также,

    const reoder = (cards, startIndex, endIndex) => {
      debugger
      const tempArray = Array.from(cards)
      const [removed] = tempArray.splice(startIndex)
      console.info(tempArray)
    }

Вот мой массив карт.

  mainPlayerCards: [
    {
      id: 0,
      value: "A"
    },
    {
      id: 1,
      value: "B"
    },
    {
      id: 2,
      value: "C"
    }
  ],

Любая помощь будет оценена. Я не совсем уверен, что там происходит.

Спасибо

Можете показать, как вы это делаете на редукторе?

Alexandre Wiechers Vaz 18.10.2018 21:51

Когда splice вызывается как arr.splice(0), он очищает массив arr. Вы можете прочитать документацию на splice. Это не имеет ничего общего с тем, что вы пишете в заголовке вопроса. Вы намеревались написать .splice(startIndex, 1) ... со вторым аргументом? А может .splice(startIndex, endIndex-startIndex)?

trincot 18.10.2018 22:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы должны передать 1 (количество элементов для удаления) в качестве второго аргумента вызова tempArray.splice(startIndex):

const reoder = (cards, startIndex, endIndex) => {
  const tempArray = Array.from(cards)
  const [removed] = tempArray.splice(startIndex, 1)
  tempArray.splice(endIndex, 0, removed);
  console.info(tempArray);
  return tempArray;
};

reoder([
    {
      id: 0,
      value: "A"
    },
    {
      id: 1,
      value: "B"
    },
    {
      id: 2,
      value: "C"
    }
  ], 0,1);

Вау, мне следовало читать документацию более четко! Спасибо!

Jack 18.10.2018 22:50

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