我正在尝试通过Axios在API上发布我的所有表单字段,但是它不起作用,并且在提交表单时也没有显示任何错误,因此有人可以帮助我解决此问题。我想提交表单,所有记录都存储在API中,因此当我访问该API时,应该显示新记录。我不明白我的逻辑错在哪里。
import React from "react";
// reactstrap components
import {
Button,
Card,
CardHeader,
CardBody,
CardFooter,
CardTitle,
FormGroup,
Form,
Input,
Row,
Col
} from "reactstrap";
import axios from 'axios';
class User extends React.Component {
constructor() {
super();
this.handleSubmit = this.handleSubmit.bind(this);
}
handleSubmit(event) {
event.preventDefault();
const data = new FormData(event.target);
axios('https://jsonplaceholder.typicode.com/users', {
method: 'POST',
body: data,
});
}
render() {
return (
<>
<div className="content">
<Row>
<Col md="8">
<Card className="card-user" style={{ width: '150%' }}>
<CardHeader>
<CardTitle tag="h5">Edit Profile</CardTitle>
</CardHeader>
<CardBody>
<Form onSubmit={this.handleSubmit}>
<Row>
<Col className="pr-1" md="5">
<FormGroup>
<label>Company (disabled)</label>
<Input
defaultValue="Company Name"
disabled
placeholder="Company"
type="text"
/>
</FormGroup>
</Col>
<Col className="px-1" md="3">
<FormGroup>
<label>Username</label>
<Input
defaultValue="XYZ123"
placeholder="Username"
type="text"
/>
</FormGroup>
</Col>
<Col className="pl-1" md="4">
<FormGroup>
<label htmlFor="exampleInputEmail1">
Email address
</label>
<Input placeholder="Email" type="email" />
</FormGroup>
</Col>
</Row>
<Row>
<Col className="pr-1" md="6">
<FormGroup>
<label>First Name</label>
<Input
defaultValue="Abc"
placeholder="Company"
type="text"
/>
</FormGroup>
</Col>
<Col className="pl-1" md="6">
<FormGroup>
<label>Last Name</label>
<Input
defaultValue="Pqr"
placeholder="Last Name"
type="text"
/>
</FormGroup>
</Col>
</Row>
<Row>
<Col md="12">
<FormGroup>
<label>Address</label>
<Input
defaultValue="India"
placeholder="Home Address"
type="text"
/>
</FormGroup>
</Col>
</Row>
<Row>
<Col className="pr-1" md="4">
<FormGroup>
<label>City</label>
<Input
defaultValue="Pune"
placeholder="City"
type="text"
/>
</FormGroup>
</Col>
<Col className="px-1" md="4">
<FormGroup>
<label>Country</label>
<Input
defaultValue="Australia"
placeholder="Country"
type="text"
/>
</FormGroup>
</Col>
<Col className="pl-1" md="4">
<FormGroup>
<label>Postal Code</label>
<Input placeholder="ZIP Code" type="number" />
</FormGroup>
</Col>
</Row>
<Row>
<Col md="12">
<FormGroup>
<label>About Me</label>
<Input
type="textarea"
defaultValue=""
/>
</FormGroup>
</Col>
</Row>
<Row>
<div className="update ml-auto mr-auto">
<Button
className="btn-round"
color="primary"
type="submit"
>
Update Profile
</Button>
</div>
</Row>
</Form>
</CardBody>
</Card>
</Col>
</Row>
</div>
</>
);
}
}
export default User;
答案 0 :(得分:0)
由于使用的是基于类的组件,因此需要通过状态来控制输入。这是您的操作方法。 POST
请求在此处以状态201响应。现在,您可以访问表单数据,可以轻松地找出来。
import React from "react";
// reactstrap components
import {
Button,
Card,
CardHeader,
CardBody,
CardFooter,
CardTitle,
FormGroup,
Form,
Input,
Row,
Col,
} from "reactstrap";
import axios from "axios";
class User extends React.Component {
constructor() {
super();
this.handleSubmit = this.handleSubmit.bind(this);
}
state = {
username: "",
email: "",
firstname: "",
lastname: "",
address: "",
city: "",
country: "",
postal: "",
about: "",
};
async handleSubmit(event) {
console.log(this.state);
event.preventDefault();
const data = this.state;
const response = await axios.post("https://jsonplaceholder.typicode.com/users", {
body: data,
});
console.log(response);
}
render() {
return (
<>
<div className="content">
<Row>
<Col md="8">
<Card className="card-user" style={{ width: "150%" }}>
<CardHeader>
<CardTitle tag="h5">Edit Profile</CardTitle>
</CardHeader>
<CardBody>
<Form onSubmit={this.handleSubmit}>
<Row>
<Col className="pr-1" md="5">
<FormGroup>
<label>Company (disabled)</label>
<Input
defaultValue="Company Name"
disabled
placeholder="Company"
type="text"
/>
</FormGroup>
</Col>
<Col className="px-1" md="3">
<FormGroup>
<label>Username</label>
<Input
defaultValue="XYZ123"
placeholder="Username"
type="text"
onChange={(e) =>
this.setState({ username: e.target.value })
}
/>
</FormGroup>
</Col>
<Col className="pl-1" md="4">
<FormGroup>
<label htmlFor="exampleInputEmail1">
Email address
</label>
<Input
placeholder="Email"
type="email"
onChange={(e) =>
this.setState({ email: e.target.value })
}
/>
</FormGroup>
</Col>
</Row>
<Row>
<Col className="pr-1" md="6">
<FormGroup>
<label>First Name</label>
<Input
defaultValue="Abc"
placeholder="Company"
type="text"
onChange={(e) =>
this.setState({ firstname: e.target.value })
}
/>
</FormGroup>
</Col>
<Col className="pl-1" md="6">
<FormGroup>
<label>Last Name</label>
<Input
defaultValue="Pqr"
placeholder="Last Name"
type="text"
onChange={(e) =>
this.setState({ lastname: e.target.value })
}
/>
</FormGroup>
</Col>
</Row>
<Row>
<Col md="12">
<FormGroup>
<label>Address</label>
<Input
defaultValue="India"
placeholder="Home Address"
type="text"
onChange={(e) =>
this.setState({ address: e.target.value })
}
/>
</FormGroup>
</Col>
</Row>
<Row>
<Col className="pr-1" md="4">
<FormGroup>
<label>City</label>
<Input
defaultValue="Pune"
placeholder="City"
type="text"
onChange={(e) =>
this.setState({ city: e.target.value })
}
/>
</FormGroup>
</Col>
<Col className="px-1" md="4">
<FormGroup>
<label>Country</label>
<Input
defaultValue="Australia"
placeholder="Country"
type="text"
onChange={(e) =>
this.setState({ country: e.target.value })
}
/>
</FormGroup>
</Col>
<Col className="pl-1" md="4">
<FormGroup>
<label>Postal Code</label>
<Input
placeholder="ZIP Code"
type="number"
onChange={(e) =>
this.setState({ postal: e.target.value })
}
/>
</FormGroup>
</Col>
</Row>
<Row>
<Col md="12">
<FormGroup>
<label>About Me</label>
<Input
type="textarea"
defaultValue=""
onChange={(e) =>
this.setState({ about: e.target.value })
}
/>
</FormGroup>
</Col>
</Row>
<Row>
<div className="update ml-auto mr-auto">
<Button
className="btn-round"
color="primary"
type="submit"
>
Update Profile
</Button>
</div>
</Row>
</Form>
</CardBody>
</Card>
</Col>
</Row>
</div>
</>
);
}
}
export default User;