2016-03-29 24 views
1

Bir SmartView bileşeninin içindeki bir TextInput onChange olayından redux durumunu güncellemeye çalışıyorum. Benim durumumda, oranların bir listesini görüntülüyorum. Düzenlenen oranı iki değerine ayırmak istiyorum. Ancak, setItem yöntemine iletilen text değeri beklediğim bir dize değil, ancak bir Text veya TextInput nesnesi gibi görünüyor.TextInput onChange olayı metin nesnesini almıyor dize

editItem, redux durumunda düzenlemeyi gerçekleştiren bir redux eylemidir.

Girdi dizesi değerini nasıl iletebilirim, böylece bunu eyleme geçirebilirim? TextInput belgelerine

class DataList extends Component { 

    constructor(props) { 
    super(props); 
    // Bind the function so we can use it on onPress event 
    this.renderRow = this.renderRow.bind(this); 

    const { data } = this.props.currentData; 
    this.dataSource = new ListView.DataSource({ 
     rowHasChanged: (r1, r2) => r1 !== r2 
    }) 
    } 

    render() { 
    // Keep dataSource up to date with redux state 
    const { data } = this.props.currentData; 
    const dataSource = this.dataSource.cloneWithRows(data.list); 

    return (
     <View> 
     <ListView 
      dataSource={dataSource} 
      renderRow={this.renderRow} 
      renderSeparator={(sectionID, rowID) => <View key={`${sectionID}-${rowID}`} style={styles.separator} />} 
      style={[styles.list, {height: windowDims.height}]} 
      initialListSize={1} 
     /> 
     </View> 
    ) 
    } 

    setItem(index, text) { 
    console.log (index + "; [" + text + "]") 
    console.log (text) // Prints out what looks like a Text or TextInput object 
    var { data } = this.props.currentData; 
    var numerator = parseInt (text.substring (0, text.indexOf('/'))) // Fails as it does not find a string 
    var denominator = parseInt (text.substring (text.indexOf('/')+1)) 
    this.props.dispatch(editItem(index, { numerator: numerator, denominator: denominator })); 
    } 

    renderRow(rowData, sectionID, rowID) { 
    return (
     <View style={styles.rowContainer}> 
      <TextInput 
      style={styles.textInput} 
      keyboardType={'numeric'} 
      onChange={(text) => this.setItem(rowID, text)} 
      value={rowData.numerator + "/" + rowData.denominator} 
      /> 
     </View> 
    ); 
    } 
} 

cevap

1

Eğer onChangeText olayı kullanmak gerekir geliyor bana.

Güncelleştirme: onChangeText kullanarak, değiştirilen metin dizesiyle birlikte bir metin özelliği içeren bir nesne verilecektir.

+0

Ya da kullanabilirsiniz. 'onChangeText' aynı sorunla sonuçlanır – Adamski

+0

Aslında bu iyi bir ipucuydu! OnChangeText'in kullanılması, değiştirilen metin dizesiyle bir 'text' özelliği içeren bir nesne ile sonuçlanır. Teşekkürler! Bu ayrıntıyı eklemek için düzenlemek isterseniz cevabınızı kabul edeceğim ... – Adamski

İlgili konular