Я пишу приложение React / Redux, которое использует Firebase Auth / Firestore для отслеживания упражнений пользователя в тренажерном зале.У меня есть форма Redux для обработки данных, и у меня есть пример структуры данных, которую я хочу получить в Firestore:
users {
id {
name: 'John Smith'
uid: 'k1s7fxo9oe2ls9u' (comes from Firebase Auth)
exercises: {
{
name: 'Bench Press',
sets: 3,
reps: 10,
lbs: 100,
}
}
}
}
Однако я не могу понять, как продолжать добавлять новые объекты в упражненияПодколлекция (в Firestore, я думаю, это будет тип поля карты).То, что я хочу сделать - это иметь новые объекты в «упражнениях», когда пользователь отправляет новые формы.Например, если пользователь хочет добавить упражнение Deadlift, оно будет выглядеть следующим образом:
users {
id {
name: 'John Smith'
uid: 'k1s7fxo9oe2ls9u' (comes from Firebase Auth)
exercises: {
{
name: 'Bench Press',
sets: 3,
reps: 10,
lbs: 100,
},
{
name: 'Deadlift',
sets: 3,
reps: 12,
lbs: 120,
}
}
}
}
Вызов db.collection('users').doc(doc.id).add({"exercises": values});
просто обновляет уже существующий объект жима лежа, а не добавляет новый напредставление формы.
Но вызов db.collection('users').doc(doc.id).add({"exercises": values});
дает мне эту ошибку: Uncaught (в обещании) TypeError: _firebase__WEBPACK_IMPORTED_MODULE_3 __. Default.collection (...). Doc (...). Add не является функцией.
Я уже давно борюсь с этим, любая помощь очень важна.
Это мой компонент:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Field, reduxForm } from 'redux-form';
import db from '../../../firebase';
import '@firebase/firestore';
import { store } from '../../../App';
const formSubmit = (values)=> {
const currentUserId = store.getState().auth.uid;
db.collection("users").get().then((usersSnapshot) => {
usersSnapshot.forEach((doc) => {
// looking for the current user and then updating their data
if(doc.data().uid === currentUserId) {
db.collection('users').doc(doc.id).add({
"exercises": values,
});
}
});
});
}
let ExercisesForm = ({ handleSubmit }) => (
<form onSubmit={handleSubmit(formSubmit)}>
<div>
<Field name="name" component="input" type="text" placeholder="Exercise Name" />
</div>
<div>
<Field name="sets" component="input" type="number" />
<label htmlFor="sets"> sets</label>
</div>
<div>
<Field name="reps" component="input" type="number" />
<label htmlFor="reps"> reps</label>
</div>
<div>
<Field name="lbs" component="input" type="number" />
<label htmlFor="lbs"> lbs</label>
</div>
<button type="submit">Submit</button>
</form>
)
ExercisesForm = reduxForm({
form: 'exercise'
})(ExercisesForm)
const mapStateToProps = state => ({
uid: state.auth.uid,
});
export default connect(
mapStateToProps,
undefined
)(ExercisesForm);