#javascript #react-native #object #expo
#javascript #реагировать -родной #объект #выставка
Вопрос:
Я получил странную ошибку, я создал массив счетчиков, чтобы проверить, сколько раз была забронирована услуга, когда я сохраняю и визуализирую ее нормально. но когда я снова сохраняю после добавления нескольких строк кода, приложение выходит из строя, и я получаю красную ошибку, как указано в названии.
Это запрос firestore для получения сервисов:
useEffect(() => {
firebase.firestore().collection("users").doc(uid).collection("my-appointments").get().then((snapshot) => {
const arrayOfServices = [];
snapshot.forEach((doc) => {
arrayOfServices.push(doc.data().serviceType);
})
setServices(arrayOfServices);
})
}, [])
Это код массива счетчика (дубликат с другой страницы (настроенный для этой страницы), который работает нормально!):
const arrayofServices = services; //services => state the holding the services
const servicesCounter = arrayofServices.reduce((counterObj, service) => {
if (counterObj.hasOwnProperty(service)) {
counterObj[service] = 1;
return counterObj;
}
return {
...counterObj,
[service]: 1
};
}, {});
setServicesObj(servicesCounter);
console.log(servicesCounter);
Журнал:
Object {
"Learn JavaScript": 2,
"Learn React": 1,
"manicure": 3,
}
Комментарии:
1. возможно, массив, который вы уменьшаете, не определен
2. Я добавил журнал этого, очень странно.
3. журнал является объектом, а не массивом, возможно, вам придется сначала преобразовать его в массив, используя логику, которую я дал в одном из предыдущих ответов
4. чтобы выполнить итерацию по объекту, вы могли бы использовать for..in петля
Ответ №1:
Перед вызовом .reduce() добавьте оператор if, чтобы ваше приложение не зависало.
if(!arrayOfServices) return;
const servicesCounter = arrayofServices.reduce((counterObj, service) => {
if (counterObj.hasOwnProperty(service)) {
counterObj[service] = 1;
return counterObj;
}
return {
...counterObj,
[service]: 1
};
}, {});
и затем вам нужно выяснить, почему «arrayOfServices» является неопределенным.
Комментарии:
1. Я не могу понять, почему, проблема в уменьшении, я думаю. один раз он работает, один раз нет
2. Проблема заключается в методе reduce, потому что массив, который вы пытаетесь уменьшить, не определен, поэтому вам нужно проверить arrayOfServices . Например, перед setServices(arrayOfServices) вы должны добавить console.log(arrayOfServices), чтобы увидеть, не определено ли оно.
3. Мне удалось справиться с этим, мой партнер удалил документы из базы данных