const switchInputs = (state) => {
console.log(state.switchInput) // disabled
this.setState(() => {
return {
switchInput: 'enabled'
}
});
}
Даёт ошибку:
TypeError: Cannot read property 'setState' of undefined
Функция находится в другом файле, данные стейта до функции доходят
Передайте в функцию значение this
из компонента, там у вас другая переменная this
, отсюда и ошибка. Ведь this
имеет разное значение при каждом вызове функции, а еще значение this
зависит от того, каким образом вызвана функция.
const switchInputs = (me, state) => {
console.log(state.switchInput) // disabled
me.setState(() => {
return {
switchInput: 'enabled'
}
});
}
Ну и вызывайте, передавая в первом параметре this
компонента. Раньше вы вызывали функцию с одним параметром, а теперь нужно будет вызвать с двумя. Полезная ссылка для изучения: this
Вообще, так делать не рекомендуется, лучше менять стейт в самом компоненте и функции писать внутри него, дабы не породить сайд эффекты.
Отступая от темы передачи this
и вызова setState
вне компонента, хотелось бы отметить некоторые моменты.
props
; Вот так, объединяя простые и сложные подходы в разработке React приложения можно добиться чистого, понятного и не громоздкого кода. Прикрепил ссылки в описании, но всё же вынесу отдельно:
UPD: Изначально все покажется сложным, но после того, как удастся прикрутить Redux к своему приложения и написать несколько экшенов и редьюсеров, станет намного легче и проще. Рекомендуется начать использовать Redux на начальном этапе разработки проекта. В большой проект, не имея опыта работы с Redux, сложно будет затянуть Redux, это повлечет большие изменения и займет много времени.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть input при нажатии на который должен появится блок и при повторном нажатии скрыться:
Подскажите, пожалуйста, что не так с этим таймером? Он не останавливается, когда time = 0 Как мне это исправить?
Хочу изменить текст "Показать все" на "Скрыть"Как можно это сделать?