我正在使用react-native运行示例应用程序。我有一个包含对象列表的示例数组,即 [a,b,c,d,e] 。我在数组中创建了 object a 的重复项,它创建了 object a 的副本,我在数组中创建了另一个对象重复但是它被替换为对象重复。如何解决这个问题...请帮帮我。 这是我的代码:
export default class AllCategories_list extends Component {
constructor(props) {
super(props)
this.state = {
dataSource: new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 })
}
}
duplicate(index) {
var duplication = []
var duplicationObj = Object.assign({}, index) //Object.create(duplicateArray)
duplication.push(duplicationObj)
alert(JSON.stringify(duplication))
var finalArray = array.concat(duplication)
this.setState({
dataSource: this.state.dataSource.cloneWithRows(finalArray)
})
}
rowData(list) {
// alert(JSON.stringify(list))
return (
<View style={styles.listContainer}>
<TouchableOpacity onPress={this.duplicate.bind(this, list)}>
<Text style={styles.item}>{list}</Text>
</TouchableOpacity>
</View>
)
}
render() {
return (
<View style={styles.container}>
<ListView
contentContainerStyle={styles.list}
dataSource={this.state.dataSource}
// horizontal={true}
renderRow={this.rowData.bind(this)}
/>
</View>
)
}
}
答案 0 :(得分:0)
根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign,Object.assign不进行深度克隆,“对于深度克隆,我们需要使用其他替代方法,因为Object.assign()复制属性值。如果源值是对对象,它只复制那个参考值。“
如果您的对象是可序列化的,那么您可以这样做
duplicate(index) {
var finalArray = JSON.parse(JSON.stringify(index));
this.setState({
dataSource: this.state.dataSource.cloneWithRows(finalArray)
})
}
答案 1 :(得分:0)
我找到了解决方案.............
将 var duplication = [] 声明为全局数组.....它不会替换数组中的对象......