Реагировать на родной, как объединить два массива с функцией

У меня есть две функции, и когда я нажимаю каждую из них, я создаю массив.

    this.state = {
            food:[],
            sports:[],
            interest:[],   
        } 

         _favoriteFood(foodState){
            const food = foodState
            this.setState({food:food})
            console.info(food)
            console.info(this.state.food)
          }

         _favoriteSports(SportsState){
            const sports = SportsState
            this.setState({sports:sports})
            console.info(sports)
            console.info(this.state.sports)
          }
render(){


return (
<View>
      <FavoriteFood favoriteFood = {this._favoriteFood}/>
</View>
       <View>
             <FavoriteSports favoriteSports = {this._favoriteSports}/>
       </View>
)}

Так, например, я получаю такие массивы, как food:[pizza, hodog] и sports:[basketball, surfing], когда вызываю метод нажатием кнопки.

У меня вопрос, когда я пытаюсь объединить два массива, например:

const interest = [...this.state.food, ...this.state.sports]

Он показывает undefined, потому что я думаю, что вызываю его до того, как произойдет рендеринг.

Должен ли я сделать другой метод для объединения массивов? Любые советы или комментарии были бы действительно полезны. Заранее спасибо :)

Где и когда вы вызываете функцию, объединяющую эти состояния?

devserkan 02.09.2018 04:28

Я отредактировал свой текст. Пожалуйста, посмотрите Спасибо!

kirimi 02.09.2018 04:32

Код и вопрос очень несовместимы. Например, вы используете 3 (!) Разных имени для одной переменной: food, toggle1 и toggle1Text.

Finesse 02.09.2018 04:33

@ Изящество моей ошибки. Я редактировал код.

kirimi 02.09.2018 04:35

Тем не менее, я не понимаю, где вы делаете это задание и используете его.

devserkan 02.09.2018 04:46

Кроме того, постарайтесь не создавать дополнительное состояние (интересное здесь), если вы можете управлять им из текущего состояния.

devserkan 02.09.2018 04:47
Поведение ключевого слова "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) для оценки ваших знаний,...
3
6
11 856
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Проблема может возникнуть из-за того, что React не меняет состояние сразу после вызова setState, он может изменить состояние позже. Если вы хотите получить доступ к состоянию после того, как React применит изменение, вы должны использовать второй аргумент метода setState:

_favoriteFood(food){
  this.setState({food}, () => {
    const interest = [...this.state.food, ...this.state.sports];
  });
}

Справка

Другое решение - использовать аргумент вашего метода вместо чтения того же значения из this.state:

_favoriteFood(food){
  this.setState({food});
  const interest = [...food, ...this.state.sports];
}

Кстати, вы не должны хранить const interest = [...this.state.food, ...this.state.sports] в состоянии, потому что он может быть получен из других переменных состояния.

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

kirimi 02.09.2018 05:05

но как мне вызвать объединенные массивы внутри render() {return()}?

kirimi 02.09.2018 05:09

@kirimi Внутри render так: const interest = [...this.state.food, ...this.state.sports];. Метод render должен иметь возможность отображать любое возможное состояние компонента, поэтому создайте оператор if, который отображает что-то еще, когда значение не определено.

Finesse 02.09.2018 09:36

@kirimi Или добавьте значение по умолчанию для элемента состояния. Согласно вашему вопросу, ни this.state.food, ни this.state.sports не могут быть неопределенными в любой момент времени (если методам заданы значения).

Finesse 02.09.2018 09:39

Вставить несколько элементов в массив

Объединить два массива

var subject1=['item1','item2']


var subject=['item3','item4','item5'];

subject1.push(...subject)

console.info(subject1);

//output

['item1', 'item2', 'item3', 'item4', 'item5']

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