Javascript TextInput onChange事件接收文本对象而不是字符串
我正在尝试从ListView组件中的TextInputJavascript 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) {
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
属性,该属性具有已更改的文本字符串,只需进行最小的更改即可将其取出。谢谢我会接受你的答案,如果你想编辑它添加细节。。。