Я хотел бы создать ловушку для добавления данных в базу данных пожарного депо. Я не уверен, что если я неправильно понимаю, как работают хуки или пожарный магазин, я новичок в обоих.
Внимание:
Невозможно выполнить обновление состояния React для неустановленного компонента. Это не работает, но это указывает на утечку памяти в вашем приложении. Для исправления отмените все подписки и асинхронные задачи в функции очистки useEffect.
Firebase API
createTeam = newTeam => {
return this.db.collection("teams").add({
...newTeam
});
};
Крючок
export default function useFetch(action) {
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const [data, setData] = useState(null);
async function performAction(body) {
try {
setLoading(true);
setData(null);
setError(null);
const data = await action(body);
setData(data);
} catch (e) {
setError(e);
} finally {
setLoading(false);
}
}
return [{ loading, data, error }, performAction];
}
Компонент
const [state, runFetch] = useFetch(db.createTeam);
const { values, handleChange, isDirty, handleSubmit } = useForm({
initialValues: {
name: "",
location: ""
},
onSubmit({ values }) {
runFetch(values);
},
validate(e) {
return e;
}
});
State.data никогда не устанавливается в ожидаемый ответ, однако запись в журнал после ожидания в обработчике выборки показывает, что я получаю ответ. Должен ли я делать это в useEffect? Каков подходящий способ выполнить эту задачу через ловушку / firebase?