В предыдущем вопросе я спросил, почему я получаю эту ошибку «карта не является функцией», и там я понял, что это потому, что после обновления данных в моем приложении response.message больше не был в формате массива для этого.Скрипт, в котором я отображаю все мои данные, получил ошибку, потому что map работает только с массивом.Так что выяснить, почему произошла ошибка, было полезно, но я не могу найти причину в моем коде, почему мои данные после обновления больше не имеют формат массива.Поэтому я надеялся, что, возможно, кто-то увидит ошибку, которую я пропускал все время.Ниже я размещу фрагменты своего кода там, где, как мне кажется, могла произойти ошибка:
сценарий редактирования данных:
export class VehicleEdit extends React.Component {
constructor(props){
super(props);
const vehicleId = props.match.params.name;
this.state ={
vehicle: {}
};
getDetail(vehicleId).then((response) => {
this.setState({
vehicle: response.message,
});
});
}
updateManufacturer(manufacturer) {
this.setState({
vehicle: {
...this.state.vehicle,
manufacturer,
},
});
}
updateModel(model) {
this.setState({
vehicle: {
...this.state.vehicle,
model,
},
});
}
onSubmit = (e) => {
e.preventDefault();
update(this.state.vehicle.name, this.state.vehicle).then((response) => {
this.props.history.push('/vehicles');
});
}
render() {
return (
<div>
{ (this.state.vehicle.name) ? (
<form onSubmit={this.onSubmit}>
<h1>{this.state.vehicle.name}</h1>
<div>
<label >Model: </label>
<input type="text" name="model" id="model" value={this.state.vehicle.model} onChange={(e) => this.updateModel(e.target.value)} />
</div>
<div>
<label >Manufacturer: </label>
<input type="text" name="manufacturer" id="manufacturer" value={this.state.vehicle.manufacturer} onChange={(e) => this.updateManufacturer(e.target.value)} />
</div>
) : ( <p>Loading student details...</p>)}
</div>
);
}
}
export default VehicleEdit;
мое обновление в моем приложении vehicle.service.js
export const update = (name, vehicle, vehicles) => fetch(`${url}/vehicles/${name}/edit`, {
method: 'PUT',
body: JSON.stringify(vehicle),
mode: 'cors',
headers: new Headers({
'Content-Type': 'application/json',
})
}).then((response) => {
if(response.statusText === 'OK') {
return response.json();
}
throw new Error('Something went wrong UPDATING vehicle with name' + name);
});
и мой маршрут обновления в моем собственном API:
// UPDATE VEHICLE
app.put('/vehicles/:name/edit', (req, res) => {
let vehicle = null;
console.log('update vehicle', [req.body]);
if (vehicles[0] && vehicles[0].length) {
vehicle = vehicles[0].filter((vehicle) => ('' + vehicle.name) === req.params.name);
}
if (vehicle) {
vehicles = vehicles[0].map((s) => {
return ('' + s.name) === req.params.name ? vehicles.push[req.body] : s;
})
res.send({
status: config.STATUS.OK,
message: [req.body],
});
} else {
res.send({
status: config.STATUS.ERROR,
message: 'Could not find vehicle for update',
});
}
});
Извините за очень длинный вопрос.Это просто потому, что я не знаю, где я ошибся с этим.Очень надеюсь, что кто-то увидит мою ошибку.Заранее спасибо