【发布时间】:2016-11-17 09:50:52
【问题描述】:
我有
<ScrollView horizontal={true} >
{this.state.images.map((uri,i) =>
<Thumb key={i} number={i} uri={uri} onDelete ={this.deleteImage.bind(this)} /> )}
</ScrollView>
这里每个Thumb 类都有Image。每当我单击图像时,都需要将其从ScrollView 中删除。
我的 Thumb 组件看起来像这样
class Thumb extends React.Component {
constructor(props){
super(props);
this.state = {
show : false
}
}
shouldComponentUpdate(nextProps, nextState) {
console.log(nextProps,'nextprops')
return false;
}
render() {
return (
<View style={[styles.button ]}>
<View style={[{position:'relative'},styles.img]} >
<View style={{position:'absolute'}}>
<Image style={styles.img} source={{uri:this.props.uri.path}}/>
</View>
<View style={[styles.img , {position:'absolute',alignItems:'center',justifyContent:'center',opacity:1}]}>
<TouchableHighlight onPress = {() => {this.props.onDelete(this.props))}}>
<Icon name="close" size = {30} color="white"/>
</TouchableHighlight>
</View>
</View>
</View>
);
}
}
我正在尝试删除
deleteImage(deleteProp){
// console.log(_scrollView)
// _scrollView.props.children.splice(deleteProp.number,1)
// console.log(_scrollView)
console.log(deleteProp,'prop from delete method');
console.log(this.state.images ,'before')
let images = this.state.images;
console.log(images.splice(deleteProp.number ,1),'splice data');
this.setState({images : images});
console.log(this.state.images,'after')
if(this.state.images.length == 0 ){
this.setState({loading:false})
}
}
我应该如何做到这一点?
我尝试删除相应的状态明智的 Image 对象,但它总是删除 ScrollView(或最后一个 Thumb 组件)的最后一个图像。
我是 react-native 和 Android 的新手,我不知道 ScrollView 可以做到这一点。请建议我正确的方法。
【问题讨论】:
-
您可以发布代码以从 state.images 中删除条目吗?通常你想传递你想删除的项目的索引/ID,比如
this.deleteImage.bind(this, i),这样你就知道要删除哪个了。 -
@fabio.sussetto 我正在传递索引以删除图像
-
@fabio.sussetto let images = this.state.images; images.splice(deleteProp.number ,1); this.setState({images : images});
-
一些事情:1)
splice改变了 this.state.images 的内容。在 React 中,你不应该直接改变状态,而是使用 Array#slice。 2)你如何更新deleteProp?如果可以,请发布完整的组件类,以便我们了解发生了什么。 -
@fabio.sussetto 我已经更新了代码...
标签: android reactjs react-native react-native-scrollview