TouchableHighlight в представлении списка отличается поведением при нажатии в зависимости от платформы

#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