REACTJS .join() не работает в app.js, но работает в других компонентах .js. ОШИБКА: TypeError: невозможно прочитать свойство «join» неопределенного

Я пытаюсь изменить значок с fontawesome через объект состояния, где я сохраняю имена классов и меняю их одним щелчком мыши.

у меня такое состояние

infoMobile: ["fas", "fa-info-circle", "info_mobile"],

и у меня есть эта функция, где я меняю InfoMobile

openAboutContactMob = () => {
   const {navKlasa} = this.state;
   navKlasa.push("mobile_remove");
   this.setState({navKlasa: navKlasa});

   var {infoMobile} = this.state;
   infoMobile = ["fas", "fa-times-circle", "info_mobile"];
   this.setState({infoMobile: infoMobile});
}

все это находится в файле app.js, также в ответ я использую его так

<div className = "mobile_nav_bckg"><i onClick = {this.openAboutContactMob} className = {this.infoMobile.join(' ')}></i></div>

когда я нажимаю на значок, я хочу изменить классы, поэтому значок меняется, но я получаю сообщение об ошибке:

TypeError: Cannot read property 'join' of undefined

Это может быть очевидно, но я новичок в этом, поэтому любой совет подойдет, спасибо

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

Ответы 2

Я думаю, вы забыли указать состояние ссылки. Попробуйте className = {this.state.infoMobile.join('')}

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

Вам нужно ссылаться на состояние

<div className = "mobile_nav_bckg"><i onClick = {this.openAboutContactMob} className = {this.state.infoMobile.join(' ')}></i></div>

См. this.state.infoMobile вместо this.infoMobile

Это потому, что setState (используется здесь) this.setState({infoMobile: infoMobile}); — это функция, которую React предоставляет для обновления состояния. Другое дело, что нет необходимости ссылаться на ваше предыдущее состояние, как вы делаете это здесь.

var {infoMobile} = this.state;
infoMobile = ["fas", "fa-times-circle", "info_mobile"];
this.setState({infoMobile: infoMobile});

Вы можете напрямую установить его

this.setState({infoMobile: ["fas", "fa-times-circle", "info_mobile"] });

Спасибо за твой ответ. Еще один вопрос, пока мы на нем, как лучше всего переключаться между двумя состояниями (один будет классом с «fa-times-circle», а другой с «fa-info-circle». Я хочу это произойдет в тот же клик. @Gonzalo.-

srdjan_susa 10.04.2019 22:34

вам, вероятно, следует проверить свое текущее состояние и установить другое. Не ссылайтесь на состояние напрямую, используйте формат обратного вызова для функции setState. this.setState(prevState => /** check prevState and return new one based on that */)

Gonzalo.- 11.04.2019 13:54

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