Почему мой ForEach выполняется без вызова? ReactJs?

Я делаю ForEach внутри функции, и он работает, даже если не вызывается, поэтому отображает экран.

Я пытаюсь сделать следующее: когда я нажимаю на функцию startGame, элемент массива, который находится в позиции [1], равен 5, но как только он отображает экран, он уже запускается как 6.

И функция finishGame, которую я хочу, когда я нажимаю, я хочу, чтобы она отображалась 6, но она уже становится равной 6, прежде чем я даже щелкнул функцию.

начать игру:

startGame = () => {
  this.state.cardsDealer.forEach(function(i, index, array) {
    if (index === 1) {
      array[1] = '6'
    }
  })
}

finishGame = () => {
    this.state.cardsDealer.forEach(function(i, index, array) {
      if (index === 1) {
        array[1] = '5'
      }
    })

Кто-нибудь знает почему? Или, если я поступаю неправильно, ради чего я хочу?

Если звонили - так называли. «Или, если я поступаю неправильно» - вы не должны напрямую изменять объект this.state.

zerkms 08.06.2018 02:00

Вы случайно не называете startGame в render? Также в for менять первый индекс массива бессмысленно, вобще array[1] = '6'. Нет необходимости в каких-либо for

Isac 08.06.2018 02:01

Да, я знаю, но я не знаю, обойтись без этого ...

Jota 08.06.2018 02:02

Вместо этого вы должны использовать this.setState. reactjs.org/tutorial/tutorial.html#an-interactive-component

zerkms 08.06.2018 02:02

Как я могу это сделать с помощью this.setState?

Jota 08.06.2018 02:04

@Isac Я не говорю, что они делают, имеет смысл, но замена их forEach простым присваиванием изменит семантику: что, если массив пуст или имеет длину всего 1 элемент?

zerkms 08.06.2018 02:04

@Jota Вы проверяли предоставленную мной ссылку?

zerkms 08.06.2018 02:04

@zerkms Это честно. Хотя вы все равно можете проверить это с помощью if, и это все равно будет лучше, чем использование for, чтобы всегда устанавливать один и тот же элемент.

Isac 08.06.2018 02:06

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

Felix Kling 08.06.2018 02:59
он работает, даже если он не вызывается Это невозможно. Функция должна быть вызвана, вы просто не понимаете почему. И вопрос не дает достаточно информации, чтобы на него ответить.
Barmar 08.06.2018 03:11
Поведение ключевого слова "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
10
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
startGame() {
  this.state.cardsDealer.forEach(function(i, index, array) {
    if (index === 1) {
      array[1] = '6'
    }
  })
}

Попытайся

Что ОП сделал не так? Что вы изменили? Почему это работает? «Попробуй» - это не ответ.

Felix Kling 08.06.2018 02:58

Лучше объяснить, что вы сделали, а не просто сбросить код.

Zohir Salak 08.06.2018 03:00

Это недопустимый синтаксис для определения функции, если он не является частью литерала объекта (в этом случае это сокращение от startGame: function() { ... })

Barmar 08.06.2018 03:08

Я только что столкнулся с такой ситуацией, но не совсем понимаю, почему. Например, эти два фрагмента кода, первый фрагмент кода будет автоматически запускаться при запуске, я думаю, это может быть связано с этим? , Я все еще ищу ответы, но, пожалуйста, знайте, что студенты ответят, спасибо test = () => {console.info (1); } render () {<div onClick = {this.test ()}> </div>} test () {console.info (2); } render () {<div onClick = {this.test.bind (this)}> </div>}

Thomas 13.06.2018 03:33

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