Необработанное исключение JS: TyperError: undefined не является объектом (вычисление '_this.onPress.bind') - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь сделать кнопку в React Native, используя onPress TouchableOpacity.Я работал раньше, но теперь, когда я добавил некоторые дополнительные функции в функцию «like», она больше не работает.

OnPress должен предоставить аргумент с функцией.

Iполучите ошибку Unhandled JS Exception: TyperError: undefined is not an object (evaluating '_this.onPress.bind') в моем симуляторе iOS.

Мой код:

export default class App extends Component {
  constructor(props) {
    super(props)
    
    this.state = { liked: [false, false, false] }
    this.onPress = this.onPress.bind(this)
  }

  like = (id) => {
    const liked = this.state.liked
    liked[id] = !liked[id]
    this.setState({
      liked: [!this.state.liked[0], false, false ],
    });
  }



  render() {
    return (
      <Swiper style={SliderStyles.wrapper} showsButtons={false}>
        <View style={SliderStyles.slide1}>
          <View style={CardStyles.card}>
            <View style={CardStyles.card_img} >
              <Image source={require('./recources/ny.jpg')} style={CardStyles.images}/>
            </View>
            <View style={CardStyles.card_details}>
              <Text style={TextStyles.card_title} >New York</Text>
              <View style={CardStyles.card_action}>
                <TouchableOpacity style={CardStyles.card_button} onPress={() => this.like(0)}>
                  
                  <Image source={ this.state.liked[0] === true ? 
                                  require('./recources/icons/heart_closed.png') : 
                                  require('./recources/icons/heart_open.png')
                                } style={CardStyles.card_button_img}/>
                </TouchableOpacity>
              </View>
              <Text style={TextStyles.card_name}>Seppe De Langhe</Text>
            </View>
          </View>
        </View>
      </View>
      </Swiper>
    );
  }
}

Изображение того, как выглядит мой симулятор iOS

Спасибо за помощь!

1 Ответ

0 голосов
/ 04 февраля 2019

Похоже, у вас нет метода onPress для привязки, ваш метод называется like, и поскольку вы используете функцию со стрелкой, он уже связан.

export default class App extends Component {
  state = {
    liked: [false, false, false],
  };

  like = (id) => {
    this.setState(state => {
      state.liked[id] = !state.liked[id];
      return state;
    });
  }

  render() {
    return (
      <Swiper style={SliderStyles.wrapper} showsButtons={false}>
        <View style={SliderStyles.slide1}>
          <View style={CardStyles.card}>
            <View style={CardStyles.card_img} >
              <Image source={require('./recources/ny.jpg')} style={CardStyles.images}/>
            </View>
            <View style={CardStyles.card_details}>
              <Text style={TextStyles.card_title} >New York</Text>
              <View style={CardStyles.card_action}>
                <TouchableOpacity style={CardStyles.card_button} onPress={() => this.like(0)}>
                  
                  <Image source={ this.state.liked[0] === true ? 
                                  require('./recources/icons/heart_closed.png') : 
                                  require('./recources/icons/heart_open.png')
                                } style={CardStyles.card_button_img}/>
                </TouchableOpacity>
              </View>
              <Text style={TextStyles.card_name}>Seppe De Langhe</Text>
            </View>
          </View>
        </View>
      </View>
      </Swiper>
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...