Могу ли я отправить несколько форм tcomb с одним onPress? - PullRequest
0 голосов
/ 16 мая 2018

Я создаю приложение React Native и использую библиотеку tomb-form-native для своих форм. На одном из моих экранов я перебираю массив типов и выводю форму для каждого типа:

{my_types.map(ob =>
  <View key={++i}>
    <Text>{ob.type} #{ob.num}</Text>
    <Form 
      ref={(c) => { 
        this.form = {}
        this.form[ob.type] = c 
      }} 
      type={_formType(this, ob.type)} 
      options={_formOptions(ob.type)} 
      value={this.state.value}
      onChange={this.onChange.bind(this)}
    />
  </View>
)}

<TouchableHighlight style={styles.button} onPress={this.onPress.bind(this)}>
  <Text style={styles.buttonText}>Submit</Text>
</TouchableHighlight>

Но когда я пытаюсь получить отправленные значения в моей функции onPress, она не работает для нескольких типов. Это работает для одного типа, если я вызываю getValue () только один раз:

input = this.form['my_type'].getValue()
console.log(input) // I see in my debugger that it works.

Но если я попытаюсь получить данные для двух или более типов, я ничего не вижу в журнале ...

input = this.form['my_type'].getValue()
console.log(input) // Nothing. It doesn't work.

input2 = this.form['my_other_type'].getValue()
console.log(input2) // Nothing here either.

Можно ли использовать библиотеку tcomb для отправки нескольких форм с одним onPress? Может быть, так я вызываю свою функцию onPress в свойстве onPress TouchableHighlight?

UPDATE

Эта упрощенная функция onPress предполагает, что моя ссылка на форму работает только в последний раз в цикле. Если в моем цикле есть два элемента ...

  onPress() {

    let input = this.form[1]
    console.log(input) // Undefined.

    let input2 = this.form[2]
    console.log(input2) // Object.

  }

1 Ответ

0 голосов
/ 17 мая 2018

Это представляется возможным.Если я использую массив для отслеживания ссылок на форму, он работает:

this.form = []

return (
...

{a.map(ob =>
  <View key={++i} style={s}>
    <Text>{ob.type} #{ob.num}</Text>
    <Form 
      ref={(c) => { 
        this.form.push(c)
      }} 
      key={i}
      type={_formType(this, ob.type)} 
      options={_formOptions(ob.type)} 
      value={this.state.value}
      onChange={this.onChange.bind(this)}
    />
  </View>
)}

<TouchableHighlight style={styles.button} onPress={this.onPress.bind(this)}>
  <Text style={styles.buttonText}>Submit</Text>
</TouchableHighlight>

А вот упрощенное onPress ...

onPress() {
  let tF = this.form
  tF.forEach(function(f) {
    if (f) { // First two times through the loop, f is null, in my application.
      console.log(f.getValue()) // It works!
    }
  })
}
...