I'm Following an example Project online MERN exercise Tracker.(我正在跟踪在线MERN运动追踪器的示例项目。)
The back-end fully works, all crud operations successfully work.(后端完全正常运行,所有原始操作均成功运行。) The Front-end React portion does not work when editing or updating data.(编辑或更新数据时,前端React部分不起作用。) Essentially the only way for me to update data would be using POSTMAN.(本质上,我更新数据的唯一方法是使用POSTMAN。) I've tried configuring everything, From what I understand is that the Axios Request is Not working properly.(我已经尝试配置所有内容,据我了解,Axios请求无法正常工作。)
I have attached all code that is relevant to the edit or update functionality(我已经附加了所有与编辑或更新功能相关的代码)
-----TO QUICKLY NAVIGATE TO THE RELEVANT PART LOOK AT THE EXERCISE COMPONENT ON THE FIRST CHUNK OF CODE.(-----快速导航到第一部分代码中的运动部件的相关部分。)
AND FOR THE SECOND ONE LOOK AT THE COMPONENT DIDMOUNT AND ONSUBMIT METHOD----------(并第二次看了组件数字和提交方法----------)
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import axios from 'axios';
const Exercise = props => (
<tr>
<td>{props.exercise.username}</td>
<td>{props.exercise.description}</td>
<td>{props.exercise.duration}</td>
<td>{props.exercise.date.substring(0,10)}</td>
<td>
<Link to={"/edit/"+props.exercise._id}>edit</Link> | <a href="#" onClick={() => { props.deleteExercise(props.exercise._id) }}>delete</a>
</td>
</tr>
)
export default class ExercisesList extends Component {
constructor(props) {
super(props);
this.deleteExercise = this.deleteExercise.bind(this)
this.state = {exercises: []};
}
componentDidMount() {
axios.get('http://localhost:5000/exercises/')
.then(response => {
this.setState({ exercises: response.data })
})
.catch((error) => {
console.log(error);
})
}
deleteExercise(id) {
axios.delete('http://localhost:5000/exercises/'+id)
.then(response => { console.log(response.data)});
this.setState({
exercises: this.state.exercises.filter(el => el._id !== id)
})
}
exerciseList() {
return this.state.exercises.map(currentexercise => {
return <Exercise exercise={currentexercise} deleteExercise={this.deleteExercise} key={currentexercise._id}/>;
})
}
render() {
return (
<div>
<h3>Logged Exercises</h3>
<table className="table">
<thead className="thead-light">
<tr>
<th>Username</th>
<th>Description</th>
<th>Duration</th>
<th>Date</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{ this.exerciseList() }
</tbody>
</table>
</div>
)
}
}
import React, { Component } from 'react';
import axios from 'axios';
import DatePicker from 'react-datepicker';
import "react-datepicker/dist/react-datepicker.css";
export default class EditExercise extends Component {
constructor(props) {
super(props);
this.onChangeUsername = this.onChangeUsername.bind(this);
this.onChangeDescription = this.onChangeDescription.bind(this);
this.onChangeDuration = this.onChangeDuration.bind(this);
this.onChangeDate = this.onChangeDate.bind(this);
this.onSubmit = this.onSubmit.bind(this);
this.state = {
username: '',
description: '',
duration: 0,
date: new Date(),
users: []
}
}
componentDidMount() {
axios.get('http://localhost:5000/exercises/'+this.props.match.params.id)
.then(response => {
this.setState({
username: response.data.username,
description: response.data.description,
duration: response.data.duration,
date: new Date(response.data.date)
})
})
.catch(function (error) {
console.log(error);
})
axios.get('http://localhost:5000/users/')
.then(response => {
if (response.data.length > 0) {
this.setState({
users: response.data.map(user => user.username),
})
}
})
.catch((error) => {
console.log(error);
})
}
onChangeUsername(e) {
this.setState({
username: e.target.value
})
}
onChangeDescription(e) {
this.setState({
description: e.target.value
})
}
onChangeDuration(e) {
this.setState({
duration: e.target.value
})
}
onChangeDate(date) {
this.setState({
date: date
})
}
onSubmit(e) {
e.preventDefault();
const exercise = {
username: this.state.username,
description: this.state.description,
duration: this.state.duration,
date: this.state.date
}
console.log(exercise);
axios.post('http://localhost:5000/exercises/update/' + this.props.match.params.id, exercise)
.then(res => console.log(res.data));
window.location = '/';
}
render() {
return (
<div>
<h3>Edit Exercise Log</h3>
<form onSubmit={this.onSubmit}>
<div className="form-group">
<label>Username: </label>
<select ref="userInput"
required
className="form-control"
value={this.state.username}
onChange={this.onChangeUsername}>
{
this.state.users.map(function(user) {
return <option
key={user}
value={user}>{user}
</option>;
})
}
</select>
</div>
<div className="form-group">
<label>Description: </label>
<input type="text"
required
className="form-control"
value={this.state.description}
onChange={this.onChangeDescription}
/>
</div>
<div className="form-group">
<label>Duration (in minutes): </label>
<input
type="text"
className="form-control"
value={this.state.duration}
onChange={this.onChangeDuration}
/>
</div>
<div className="form-group">
<label>Date: </label>
<div>
<DatePicker
selected={this.state.date}
onChange={this.onChangeDate}
/>
</div>
</div>
<div className="form-group">
<input type="submit" value="Edit Exercise Log" className="btn btn-primary" />
</div>
</form>
</div>
)
}
}
ask by Mike Ahmed translate from so
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…