Я уже неделю бьюсь головой.Это невозможно, и все же это происходит (я знаю, яваскрипт):
Я использую fetch для получения данных с сервера следующим образом:
fetch(this.props.url, {
method: 'POST',
body: JSON.stringify({
class: 'property',
action: 'view',
objectId: this.props.element.id,
token: this.props.token,
}),
})
.then(response => response.json())
.then(json => {
console.log(json);})
Теперь тестирование с помощью Postman дает мне правильные данныерезультат:
"units": [
{
"amount_due": 22.0,
"id": 31,
"floor": 5,
"common_percentage": 0.012223,
"building": {}
},
{
"amount_due": 16.0,
"id": 33,
"floor": 5,
"common_percentage": 0.012143223,
"building": {}
}
]
Однако консоль регистрирует оба устройства с идентификатором 33.
100 раз проверил бэкэнд и вернул правильные данные.Почтальон это подтверждает.Также попытался проанализировать ответ с помощью .text () вместо .json () и .text (), чтобы получить правильные данные.Это повреждение происходит только с .json ().Я схожу с ума или я обнаружил ошибку (или особенность) в методе .json ()?
Спасибо.
РЕДАКТИРОВАТЬ 1:
Благодаря @ChrisG я обнаружил, что мой код как-то портит данные.Все это происходит после вызова this.setState:
let completedProjects = json.property.projects.filter((project) => project.finish_date);
let completedJobs = json.property.jobs.filter((job) => job.complete.filter((completion) => completion.id == this.props.user.id).length > 0 && !job.on_hold && !job.deleted);
let timeline = [{title: <Trans>heading.property.added</Trans>, createdAt: <Moment locale={this.props.i18n.language} format="ll">{json.date_created}</Moment>, comment: <Trans>description.property.added</Trans>, icon: <FontAwesomeIcon icon="home" />, sortCriterion: this.props.element.date_created }];
let inspections = this.state.inspections;
json.inspections.map((inspection)=>{
inspections.push({description: inspection.type.description, date: <Moment format="ll">{inspection.instance.date_performed}</Moment>, name: inspection.type.name, interval: inspection.type.interval, typeId: inspection.type.id, });
});
completedProjects.map((project) => {
timeline.push({title: <Trans>heading.project.completed</Trans>, createdAt: <Moment format="ll">{project.finish_date}</Moment>, comment: project.name, icon: <FontAwesomeIcon icon="project-diagram" />, sortCriterion: project.finish_date, iconColor: '#007bff' });
});
completedJobs.map((job) => {
timeline.push({title: <Trans>heading.job.finished</Trans>, createdAt: <Moment format="ll">{job.finish_date}</Moment>, comment: job.name, icon: <FontAwesomeIcon icon="check" />, sortCriterion: job.finish_date, iconColor: '#007bff' });
});
timeline.sort((a, b) => a.sortCriterion < b.sortCriterion);
this.setState({
element: json.property,
activeJobs: json.property.jobs.filter((job) => job.complete.filter((completion) => completion.id == this.props.user.id).length == 0 && !job.on_hold && !job.deleted),
completedJobs: completedJobs,
remainingJobs: json.property.jobs.filter((job) => job.on_hold || job.deleted),
// activeProjects: json.property.projects.filter((project) => !project.finish_date),
activeProjects: json.property.projects,
completedProjects: completedProjects,
collapse: true,
timeline: timeline,
});
Одно уточнение: часть «Единицы» (та, которая повреждена) является свойством объекта «свойство».Теперь, когда я пишу это, возможно ли, что «свойство» - это какое-то зарезервированное слово, и оно что-то запутывает?*
this.setState({element: json.property})
Есть идеи?