javascript многословная реакция - PullRequest
0 голосов
/ 24 марта 2020

У меня есть это:

await firebase
  .firestore()
  .collection("kategori")
  .get()
  .then(snapshot => {
    const data = snapshot.docs.map(doc => ({ [doc.id]: doc.data() }));
    dispatch({ type: "LOAD_KATEGORI", payload: data });
  });

, которое сопоставляется с состоянием

0: {something :{item1, item2, item3}}
1: {other_something :{item1, item2, item3}}

однако я хотел, чтобы оно сопоставилось с состоянием

something: {item1, item2, item3}
other_something: {item1, item2, item3}

Любое предложения?

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Используйте , уменьшите , чтобы сделать результат объектом с идентификатором do c в качестве ключа и данными do c в качестве значения

const data = snapshot.docs.reduce((res, doc) => ({ 
  ...res, 
  [doc.id]: doc.data()
}), {})

Также не смешивайте await и .then выберите один и придерживайтесь его, лично я предпочитаю async/await, поскольку его легче сканировать, поскольку он не go в .then блоки

const snapshot = await firebase.firestore().collection('kategori').get()

const data = snapshot.docs.reduce((res, doc) => ({ 
  ...res, 
  [doc.id]: doc.data()
}), {})

dispatch({ type: 'LOAD_KATEGORI', payload: data })
0 голосов
/ 24 марта 2020

Просто уменьшите ваши данные, как вам нужно, например:

const payload = Object.keys(a).reduce((acc, curr) => {
    var k = Object.keys(a[curr])[0]
    acc[k] = a[curr][k]
    return acc
}, {})

dispatch({ type: 'LOAD_KATEGORI', payload })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...