#react-native
#react-native
Вопрос:
Мне нужно назначить другое поведение для TouchableHighlight при нажатии. Я попытался обернуть свой код в функцию, но я не понимаю, почему, когда я вызываю функцию таким образом:
onPress={(data) => this.myFunction(data)}
У меня ошибка типа _this4.myFunction
is not defined .
Я знаю, что проблема this
в моем renderRow()
, но я не знаю, как ее решить. Я попытался привязать функцию к моей constructor
, а также записать self = this
в мою функцию, но безуспешно.
Поэтому я подумал использовать тернарный оператор с чем-то вроде этого:
Platform.os === 'ios' ? onPress={} : onPress={}
но и эта попытка не удалась.
Любая помощь? Я новичок в RN. Заранее благодарю вас
Ответ №1:
Я думаю, вам следует выполнить проверку платформы внутри функции, которую вы вызываете в onPress. Затем вы должны написать поведение, зависящее от платформы, для вашего осязаемого выделения.
onPress:{()=>this.doIt()}
и внутри doIt() вы должны выполнить проверку платформы, а затем выполнить код, специфичный для вашей платформы.
doIt()
{ if(Platform.OS === 'ios')
{//do this on ios}
if(Platform.OS === 'android')
{//do this on android}
}
Для привязки ‘this’ к функции вы можете либо использовать following для вызова функции doIt()
Используйте привязку жирной стрелки в es6
()=>this.doIt()
это я использовал выше,
Или используйте этот оператор в конструкторе
this._renderRow = this._renderRow.bind(this)
Комментарии:
1. Привет. Спасибо за ответ. Единственная проблема этого метода, которую я уже пробовал, заключается в том, что я получил ошибку при использовании этого. Я думаю, потому что это в Listview
2. @LoveToCode, почему
this._renderRow = this._renderRow.bind(this)
в конструкторе сработал трюк?3. Посредством привязки this вы передаете область действия ‘this’ функции _renderRow() , есть много способов сделать это. Вы можете перейти по ссылке sitepoint.com/bind-javascripts-this-keyword-react @пятый
Ответ №2:
В constructor()
я добавил
this._renderRow = this._renderRow.bind(this)
и я мог бы использовать это в TouchableHighlight onPress