Как вызвать Alert onPress и отправить некоторый параметр в том, чтобы реагировать на родной - PullRequest
0 голосов
/ 06 ноября 2019

Здесь я вызываю функцию alart onPress для текстового поля. При вызове этой функции я пытаюсь открыть предупреждение и при подтверждении, что я звоню по другой функции. Но это зависает, если я вызываю "showAlert1 ()". Эта функция вызывается много раз, мне нужно вызвать функцию showAlert () onPress, и мне нужно отправить некоторое значение в in. И при нажатии кнопки ОК на оповещении я должен загрузить на сервер.

showAlert1(code, name, version) {
  console.log("data alaert abc", code, name, version);
  Alert.alert(
    'Confirmation',
    'Are you sure you want to migrate this tariff',
    [
      {
        text: 'Cancel',
        onPress: () => console.log('Cancel Pressed'),
        style: 'Cancel',
      },
      { text: 'Proceed', onPress: () => this.confirmTariffMigration(code, name, version) },
    ]
  );
}

confirmTariffMigration = (code, name, version) => {
  console.log("hhhhdhhdhdhdhhdd", code, name, version);
  const objData = {
    addofferingActionCode: '',
    offeringCode: '',
    offeringName: ''
  }
  this.props.updateTariffMigration(objData)
}
<View style={{ marginLeft: 5, marginRight: 5, marginTop: 10, backgroundColor: '#f1f1f1' }}>
  {
    tariffMigrationData.map((data, index) => {
      return (
        //  <TouchableOpacity key={index} onPress={this.showAlert1(data)}>
        <View style={{ marginBottom: 10, marginLeft: 5, marginRight: 5 }} key={index}>
          <Card>
            <CardItem header style={{ backgroundColor: '#fff', width: '100%', justifyContent: 'space-between', borderBottomColor: '#f1f1f1', borderBottomWidth: 1 }}>
              <View style={{ flexDirection: 'column', justifyContent: 'space-between' }}>
                <View>
                  <RegularText text={`${data.offering.name}`} style={{ fontWeight: 'bold' }} />
                  <SmallText text={` ID ${data.offering.code}`} textColor="grey" />
                </View>
              </View>
              <View style={{
                backgroundColor: 'blue',
                borderRadius: 75, height: 25, paddingRight: 10, paddingLeft: 10, paddingTop: 5
              }}>
                <SmallText text={'Proceed'} onPress={this.showAlert1(data.offering.code, data.offering.version, data.offering.name)} textColor='white' />
              </View>
            </CardItem>
          </Card>
        </View>
      )
    }
  }
</View>

Ответы [ 3 ]

2 голосов
/ 06 ноября 2019

Попробуйте изменить:

<TouchableOpacity key={index} onPress={this.showAlert1(data)}>

на

<TouchableOpacity key={index} onPress={() => this.showAlert1(data)}>

И

showAlert1 (code,name,version) {  
    // code
}

К

showAlert1 = (code,name,version) => {  
    // code
}
1 голос
/ 06 ноября 2019

как дополнение к Кишан Бхарде. Когда мы столкнулись с проблемой, мы должны знать, почему не просто исправить.

Что касается того, как передать функцию в реквизиты компонента, вы можете прочитать официальный блог и получить более подробную информацию

когда мы хотим передать параметры реквизиту, есть два способа:

<TouchableOpacity key={index} onPress={() => this.showAlert1(data)}>
<TouchableOpacity key={index} onPress={this.showAlert1.bind(this,data)}>

когда вам нравится ваш вопрос

<TouchableOpacity key={index} onPress={this.showAlert1(data)}>

это не передать функцию,это называется не ссылка.

1 голос
/ 06 ноября 2019

Убедитесь, что вы импортировали «Alert» из «act-native », а не какой-либо другой модуль.

https://i.stack.imgur.com/oMj8s.png

Прежде всего, попробуйте изменить это:

<SmallText text={'Proceed'}  onPress={this.showAlert1(data.offering.code,data.offering.version,data.offering.name)} textColor='white' />
до:

<SmallText text={'Proceed'}  onPress={() => this.showAlert1(data.offering.code,data.offering.version,data.offering.name)} textColor='white' />

Также попробуйте изменить

showAlert1 (code,name,version) {  
    #code
}

до

showAlert1 = (code,name,version) => {  
    // code
}
...