[英]POST API request in React js Form?
我正在尝试通过 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;
您需要通过 state 控制输入,因为您使用的是基于类的组件。 这是你如何做到的。 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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.