In the following example:
MapView displays ListView items as annotations- Clicking on a
ListView element should make it blue . - Bonus if
MapView and ListView make good use of the state object
Changing the DataSource of ListView seems to cause a conflict when the active attribute changes:
You tried to set the key "active" with the value "false" to an object that must be immutable and was frozen.

What is the correct way to set state?
RNPlay example
'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);