Могу ли я отправить несколько форм tcomb с одним onPress?
Я создаю приложение 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?
ОБНОВИТЬ
Эта упрощенная функция onPress предполагает, что моя ссылка на форму работает только в последний раз в цикле. Если в моем цикле есть два элемента...
onPress() {
let input = this.form[1]
console.log(input) // Undefined.
let input2 = this.form[2]
console.log(input2) // Object.
}
1 ответ
Это представляется возможным. Если я использую массив для отслеживания ссылок на форму, он работает:
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() {
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!
}
})
}