Как отправить от actioncreator к редуктору без ошибок за один раз? - PullRequest
0 голосов
/ 08 июня 2019

Я отправляю изображение в базу данных. Все успешно, и я могу загрузить изображение в хранилище Firebase. Но после того, как я добился успеха, мои коды внезапно отправили сообщение об ошибке еще раз. Таким образом, я записал несколько цифр, чтобы посмотреть, что происходит, и я получил «1,2,3,4 затем успех, а затем ошибка» на моей консоли , Как я могу загрузить изображение без ошибки? Я мог бы загрузить, но я также получаю ошибку сейчас .. Заранее спасибо .. Сообщение об ошибке гласит: «Недопустимая попытка распространения не повторяемого экземпляра».

export const uploadPhoto = (uri, contentType = 'image/jpeg') => {
return async dispatch => {
    try {
        console.log('1');

        const userId = firebase.auth().currentUser.uid;
        const photoId = await uniqueIdGenerator();
        dispatch({ type: UPLOAD_START });
        console.log('2');

        const snapshot = await firebase.storage().ref()
            .child(`/photos/${userId}`)
            .child(photoId)
            .put(uri, { contentType });
        console.log('3');

        await firebase.firestore()
            .collection('users').doc(userId)
            .collection('photos').doc(photoId)
            .set({ url: snapshot.downloadURL });
        console.log(snapshot.downloadURL);
        console.log('4');

        await dispatch({ type: UPLOAD_SUCCESS, payload: snapshot.downloadURL });
        console.log('5');

        Actions.pop();
        console.log('6');

    }
    catch (error) {
        dispatch({ type: UPLOAD_FAILED });
        console.log(error.message);
    }
}
}

вот мой редуктор:

const INITIAL_STATE = {
    data: [],
    loading: false
}

export default (state = INITIAL_STATE, { type, payload }) => {
    console.log('reducerState', state);
console.log('type,payload', type, payload);

switch (type) {
    case UPLOAD_START:
        return { ...state, data: payload, loading: true }
    case UPLOAD_SUCCESS:
        console.log('succesa girdi');
        return { ...state, data: [...state.data, payload], loading: false }
    case UPLOAD_FAILED:
        return { ...state, data: payload, loading: false }
    case GET_PHOTOS_START:
        return { ...state, data: payload, loading: true }
    case GET_PHOTOS_SUCCESS:
        return { ...state, data: payload, loading: false }
    case GET_PHOTOS_FAILED:
        return { ...state, data: payload, loading: false }
    default:
        return state;
}
}

EDIT

Я выяснил проблему, удалив все фиктивные данные из моего хранилища баз данных. Я использую эмулятор для тестирования своего приложения и использую одни и те же фотографии снова и снова. Скорее всего, одни и те же фотографии вызывают проблемы, потому что я ничего не изменил в своем приложении, но теперь работает хорошо.

1 Ответ

0 голосов
/ 09 июня 2019

Попробуйте изменить свой редуктор

case UPLOAD_SUCCESS:
    console.log('succesa girdi');
    return { ...state, data: [...state.data, payload], loading: false }

на

case UPLOAD_SUCCESS:
    console.log('succesa girdi');
    return { ...state, data: payload, loading: false }

Я думаю, что есть ошибка, о которой пытается предупредить вас.Я не уверен, почему вы пытаетесь распространить состояние дважды

ОБНОВЛЕНИЕ

в этом случае попробуйте это

case UPLOAD_SUCCESS:
    console.log('succesa girdi');
    let urls= state.data
    urls.push(payload)
    return { ...state, data: urls, loading: false }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...