我的问题是,当我创建数据或发布(我使用Firebase数据库)时,它不会因标记coordinates
而出错。但是,当我尝试编辑任何数据(更改其他数据(如“标题”或“描述”)而不是数据的纬度或经度时,出现了错误,因为我不想让用户仅编辑“标题”,“描述”,和图片。
这是我尝试更新标题(不是纬度或经度)后遇到的错误
更新由AIRMapMarker |管理的视图的属性“ coordinate”时出错。空|纬度
要询问有关此的更多信息,请告诉我。谢谢!
这是我的代码:
EventMapScreen:这是我的标记的呈现位置。
<MapView
style={styles.map}
initialRegion={{
latitude: 14.6317303,
longitude: 121.0324869,
latitudeDelta: 0.0922,
longitudeDelta: 0.0421
}}
onPress={this.pickLocationHandler}
ref={ref => this.map = ref}
provider={PROVIDER_GOOGLE}
>
{this.props.eventsState.map((marker, index) => {
const scaleStyle = {
transform: [
{
scale: interpolations[index].scale,
},
],
};
const opacityStyle = {
opacity: interpolations[index].opacity,
};
return (
<Marker
key={index}
coordinate={{latitude: marker.latitude, longitude: marker.longitude}}
onPress={() => {
navigate('EventDetail', {
eventId: marker.id
});
}}
>
{/* <Animated.View style={[styles.markerWrap, opacityStyle]}>
<Animated.View style={[styles.ring, scaleStyle]} />
<View style={styles.marker} />
</Animated.View> */}
<Animated.View style={[styles.markerWrap]}>
<Animated.View style={[styles.ring]} />
<View style={styles.marker} />
</Animated.View>
</Marker>
);
})}
</MapView>
EditEventScreen:这是我用来创建和编辑帖子或数据的
<ScrollView>
<StatusBar backgroundColor="white" barStyle="dark-content"/>
<View style={styles.form}>
<Input
id="imageUrl"
label="Image Url"
errorText="Please enter a Image Url!"
autoCapitalize="sentences"
returnKeyType="next"
onInputChange={inputChangeHandler}
initialValue={editedEvent ? editedEvent.imageUrl : ''}
initiallyValid={!!editedEvent}
required
/>
<Input
id="title"
label="Title"
errorText="Please enter a valid title!"
autoCapitalize="sentences"
returnKeyType="next"
onInputChange={inputChangeHandler}
initialValue={editedEvent ? editedEvent.title : ''}
initiallyValid={!!editedEvent}
required
/>
<Input
id="description"
label="Description"
errorText="Please enter a valid description!"
autoCapitalize="sentences"
returnKeyType="done"
multiline
numberOfLines={3}
onInputChange={inputChangeHandler}
initialValue={editedEvent ? editedEvent.description : ''}
initiallyValid={!!editedEvent}
required
minLength={3}
/>
</View>
{imageData || editedEvent ?
<View>
<Image
source={{uri: imageData || editedEvent.imageUrl}}
style={styles.image}
/>
</View>
: <View></View>
}
</ScrollView>
events.js:这是我的Firebase代码所在的位置
fetchEvents
用于从Firebase数据库获取数据
createEvent
用于创建数据,然后传递给Firebase DB
editEvent
来自编辑事件,然后再次传递
export const fetchEvents = () => {
return async dispatch => {
const response = await fetch('https://rn-event-6c2e4.firebaseio.com/events.json');
const resData = await response.json();
const loadedEvents = [];
//id = key, userID = u1
for (const key in resData) {
loadedEvents.push(
new Event(
key,
'u1',
resData[key].imageUrl,
resData[key].title,
resData[key].description,
resData[key].latitude,
resData[key].longitude
)
);
}
dispatch({
type: SET_EVENTS,
events: loadedEvents
})
};
};
export const createEvent = (imageUrl, title, description, latitude, longitude) => {
return async dispatch => {
try {
const response = await fetch('https://rn-event-6c2e4.firebaseio.com/events.json', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
imageUrl,
title,
description,
latitude,
longitude
})
});
if (!response.ok) {
throw new Error('Something went wrong!');
}
const resData = await response.json();
console.log(resData);
dispatch({
type: CREATE_EVENT,
eventData: {
imageUrl,
title,
description,
latitude,
longitude
}
});
} catch (err) {
throw err;
}
};
};
export const updateEvent = (id, imageUrl, title, description) => {
return async dispatch => {
const response = await fetch(`https://rn-event-6c2e4.firebaseio.com/events/${id}.json`, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
imageUrl,
title,
description,
})
});
dispatch({
type: UPDATE_EVENT,
eid: id,
eventData: {
imageUrl,
title,
description
}
})
}
};