从Firebase更新数据时从“坐标”中获取错误

时间:2019-12-30 03:00:43

标签: javascript react-native firebase-realtime-database

我的问题是,当我创建数据或发布(我使用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
        }
    })
}
};

0 个答案:

没有答案