Javascript TextInput onChange事件接收文本对象而不是字符串

Javascript TextInput onChange事件接收文本对象而不是字符串,javascript,react-native,redux,Javascript,React Native,Redux,我正在尝试从ListView组件中的TextInputonChange事件更新redux状态。在我的例子中,我显示了一个比率列表。我想将编辑后的比率解析为两个值。但是,传递到setItem方法中的text值并不是我所期望的字符串,而是一个text或TextInput对象 editItem是一个redux操作,在redux状态下执行编辑 如何获取输入字符串值以便将其传递给操作 class DataList extends Component { constructor(props) {

我正在尝试从ListView组件中的TextInput
onChange
事件更新redux状态。在我的例子中,我显示了一个比率列表。我想将编辑后的比率解析为两个值。但是,传递到
setItem
方法中的
text
值并不是我所期望的字符串,而是一个text或TextInput对象

editItem
是一个redux操作,在redux状态下执行编辑

如何获取输入字符串值以便将其传递给操作

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>
    );
  }
}
类数据列表扩展组件{
建造师(道具){
超级(道具);
//绑定函数,以便在onPress事件中使用它
this.renderRow=this.renderRow.bind(this);
const{data}=this.props.currentData;
this.dataSource=new ListView.dataSource({
行已更改:(r1,r2)=>r1!==r2
})
}
render(){
//使用redux状态使数据源保持最新
const{data}=this.props.currentData;
const dataSource=this.dataSource.cloneWithRows(data.list);
返回(
}
style={[style.list,{height:windowDims.height}]}
initialListSize={1}
/>
)
}
setItem(索引、文本){
console.log(索引+“;[”+文本+“]”)
console.log(text)//输出看起来像文本或TextInput对象的内容
var{data}=this.props.currentData;
var numerator=parseInt(text.substring(0,text.indexOf('/'))//由于找不到字符串而失败
变量分母=parseInt(text.substring(text.indexOf('/')+1))
this.props.dispatch(editItem(索引,{分子:分子,分母:分母}));
}
renderRow(行数据、节ID、行ID){
返回(
this.setItem(rowID,text)}
值={rowData.numerator+“/”+rowData.denominator}
/>
);
}
}
在文档中,我觉得您需要使用onChangeText事件


更新:使用onChangeText将为您提供一个包含文本属性的对象,该属性带有已更改的文本字符串。

您可以使用其中一种
onChangeText
导致相同的问题,这是一个很好的线索!使用onChangeText会导致一个对象包含一个
text
属性,该属性具有已更改的文本字符串,只需进行最小的更改即可将其取出。谢谢我会接受你的答案,如果你想编辑它添加细节。。。