Im folgenden Beispiel eingefroren:Sie haben versucht, den Schlüssel auf ein Objekt einzustellen, die sein unveränderlich gemeint ist, und hat
MapView
zeigt Elemente einesListView
als Anmerkungen- Klick auf ein
ListView
Element sollte dazu führen, dass es in blau Farbe gemalt wird. wenn - Bonus der
MapView
undListView
effizient den Objektstatus verwenden
Ändern der DataSource
von ListView
scheint den Konflikt zu verursachen, wenn das active
Attribut geändert wird:
Sie haben versucht, den Schlüssel "zu setzen aktiv 'mit dem Wert' false 'auf einem Objekt , das unveränderlich sein soll und eingefroren wurde.
Was ist der richtige Weg, um den Zustand der Einstellung?
'use strict';
import React, {Component} from 'react';
import {AppRegistry,View,ListView,MapView,Text,TouchableOpacity} from 'react-native';
var annotations = [
{
title: 'A',active: false,latitude: 45,longitude: 26,latitudeDelta: 0.015,longitudeDelta: 0.015,
},{
title: 'B',active: false,latitude: 49,longitude: 14,latitudeDelta: 0.015,longitudeDelta: 0.015,
},{
title: 'C',active: false,latitude: 26,longitude: 25,latitudeDelta: 0.015,longitudeDelta: 0.015,
}
]
class SampleApp extends Component {
constructor(props) {
super(props);
var ds = new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2,
});
this.state = {
region: annotations[0],
annotations: annotations,
dataSource: ds.cloneWithRows(annotations)
};
}
handleClick(field) {
if (this.previousField) {
this.previousField.active = false;
}
this.previousField = field;
field.active = true;
this.setState({
region: field,
});
}
renderField(field) {
let color = (field.active == true)?'blue':'yellow';
return (
<TouchableOpacity onPress={this.handleClick.bind(this,field)}>
<Text style={{backgroundColor:color,borderWidth:1}}>{field.title}</Text>
</TouchableOpacity>
);
}
render() {
return (
<View style={{flex:1,flexDirection:'column',alignSelf:'stretch'}}>
<MapView
style={{flex:0.5,alignSelf:'stretch',borderWidth:1}}
region={this.state.region}
annotations={this.state.annotations}
/>
<ListView
dataSource={this.state.dataSource}
renderRow={(field) => this.renderField(field)}
/>
</View>
);
}
}
AppRegistry.registerComponent('SampleApp',() => SampleApp);
Es arbeitet mit ios-Plattform und Ihre Erklärungen half wirklich. –
Großartig! Wenn es Ihr Problem löst, würden Sie die Antwort akzeptieren? Vielen Dank! –