Обновить значение объекта во вложенном массиве в React Firestore - PullRequest
0 голосов
/ 02 января 2019

Мне нужно обновить поле значения в объекте по определенному индексу, который находится в массиве в Firebase

Я попытался перебрать массив getState() со всеми объектами;
затем получить индекс объекта, который мне нужен;
затем присвойте объекту новое значение, в данном случае содержимое;
затем перепишите весь массив (comments) в newArray (actualComments), как показано ниже.

И это работает какЯ хочу, но только в первый раз.Если я пытаюсь сделать это снова, я получаю ошибку TypeError: "content" is read-only.

    export const editComment = (comment) => {
      return (dispatch, getState, { getFirebase, getFirestore }) => {
        const firestore = getFirestore();

        let actualComments = getState().firestore.data.topics[comment.topicId].comments;
        let numberArray = actualComments.findIndex(e => {return e.id === comment.commentId});
        actualComments[numberArray].content = comment.editContent;

        firestore.collection('topics').doc(comment.topicId).update({     
          comments: actualComments
        }).then(() => {
          dispatch({ type: 'EDIT_COMMENT' })
        }).catch((error) => {
          dispatch({ type: 'EDIT_COMMENT_ERROR', error})
        })
      }
    }

1 Ответ

0 голосов
/ 04 января 2019

Мой друг помог мне с этим, и теперь мои обновления в объекте по указанному индексу в массиве работают!Вот код, ура

    /////Grab through reference all comments Array in firestore
    let actualComments = getState().firestore.data.topics[comment.topicId].comments;

    ////make container for array
    let updatedComments = [];

    //// copy array from reference to empty updatedComments array
    actualComments.forEach(comment => {
        updatedComments.push({
            content: comment.content,
            createdAt: comment.createdAt,
            editDate: comment.editDate,
            edited: comment.edited,
            id: comment.id,
            idTopic: comment.idTopic,
            name: comment.name,
            nameId: comment.nameId
        })
    })

    //// grab index which i want to update
    let numberArray = actualComments.findIndex(e => {return e.id === comment.commentId});

    //// update in specific index array
    updatedComments[numberArray].content = comment.editContent;
    updatedComments[numberArray].editDate = new Date();
    updatedComments[numberArray].edited = true; 

    //// replace updated array in firestore
    firestore.collection('topics').doc(comment.topicId).update({

        comments: updatedComments

    }).then...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...