Concat превращает массив в объект javascript + next js

Мне действительно трудно понять, где этот код идет не так. Я не могу объединить два раза подряд, потому что это превращает мой массив в объект. Вот код ...

this.setState((prevState) => ({
      //Add new bet to users array of bets
      usersByName: {
        ...prevState.usersByName,
        [newBet[0].name]: {
          ...prevState.usersByName[newBet[0].name].concat(newBet),
          amountleft: prevState.usersByName[newBet[0].name].amountleft - newBet[0].amount,
          lastweekroi: prevState.usersByName[newBet[0].name].lastweekroi,
          thisweekroi: prevState.usersByName[newBet[0].name].thisweekroi,
        },
      },
    }))

Первоначальная структура правильная и выглядит так.

enter image description here

Когда я запускаю команду setstate, она меняет структуру на это, и я не могу снова запустить concat, потому что получаю ошибку .concat is not a function

enter image description here

Кто-нибудь видит способ исправить это? Массивы, JSON и все такое сбивает с толку. Спасибо

Когда вы распространяете объект, вы получите объект обратно. Вместо этого вы можете попробовать вставить его в свой массив. Вы используете редукцию? В целом, это слишком много состояния, чтобы удерживать его в состоянии одного компонента, imho. Даже переход на useState позволит вам иметь больше фрагментов состояния, которые можно обновлять индивидуально, что, вероятно, также упростит это.

jmargolisvt 30.03.2021 00:46

К сожалению, учитывая мой опыт, сокращение - это слишком сложная задача, чтобы начинать в данный момент. Каковы недостатки того, что я делаю. Просто читаемость кода? скорость? представление? Спасибо

Thomas Byy 30.03.2021 02:17

Любые предложения с точки зрения кода. Я пробую все и ни к чему

Thomas Byy 30.03.2021 04:37

Обратной стороной является то, что, как вы понимаете, сложно обновлять. Никакого сокращения здесь не требуется, если вы действительно хотите, чтобы все это состояние было локальным для вашего компонента. Это может помочь вам увидеть, как массивы управляются с помощью useState: stackoverflow.com/questions/54676966/…

jmargolisvt 30.03.2021 06:02

Отвечает ли это на ваш вопрос? Метод push в React Hooks (useState)?

juliomalves 01.04.2021 19:31
0
5
34
0

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