【发布时间】:2018-07-30 14:40:43
【问题描述】:
我有一个使用 reactJS 开发的选择输入,其中选项是使用 nodejs 和 MySQL 的类别名称(从表类别中获取)。
我的路由器:
exports.ajouterprod = function(req, res) {
upload(req, res, function(imageUploadErr) {
console.log("req", req.body);
var today = new Date();
var produits = {
"Nomcat": req.body.Nomcat,
"Img": imge
}
console.log("Image : " + req.body.Img);
console.log(produits)
connection.query('INSERT INTO produits SET ?', produits, function(error, results, fields) {
if (error) {
console.log("error ocurred", error);
res.send({
"code": 400,
"failed": "error ocurred"
})
}
else {
res.send({
"code": 200,
"success": "produit registered sucessfully"
});
}
})
});
};
我的班级:
class AjouterProduit extends Component {
constructor(props) {
super(props)
this.state = {
Nomcat: [],
Img: "",
FormData :"",
};
this.handleSubmit = this.handleSubmit.bind(this);
}
componentWillReceiveProps(nextProps) {
console.log("nextProps", nextProps);
}
componentDidMount() {
axios({
method: "get",
url: "/app/getcat/",
withCredentials: true,
}).then(response => {
if (response && response.data) {
this.setState({
Nomcat: response.data
});
}
}).catch(error => console.log(error));
}
handleSubmit() {
const formData = new FormData();
formData.append('Nomcat', this.Nomcat);
formData.append('Img', this.state.Img);
axios({
method: 'post',
url: '/app/ajouterprod/',
data: formData,
withCredentials: true,
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(function(response) {
this.setState({
alert: null
});
this.props.history.push('/produits/listeproduits')
}.bind(this))
}
handleNomcatChange = (e) => {
this.setState({
Nomcat: e.target.value
});
}
handleImgChange = (e) => {
this.setState({
Img: e.target.files[0]
});
}
render() {
let {Nomcat} = this.state.Nomcat;
return (<div className="animated fadeIn">
<Row>
<Col xs="12" >
<Card>
<CardHeader>
<h4><strong> <i className="fa fa-cube"> </i> Ajouter un nouveau produit</strong></h4>
</CardHeader>
<CardBody>
<Form className="form-horizontal" method="POST" encType="multipart/form-data" >
<FormGroup row>
<Col md="3">
<h5> <Label htmlFor="hf-nom"><strong>Catégorie</strong></Label></h5>
</Col>
<Col xs="12" md="9">
<Input type="select" name="selectcat" id="selectcat" value={this.state.Nomcat} >
<option value="" hidden>Choisissez la catégorie</option>
<option value="0" ></option>
{ this.state.Nomcat.map((cat) => <option value={cat} key={cat.Nomcat}>{cat.Nomcat}</option>)
}
</Input>
</Col>
</FormGroup>
<FormGroup row>
<Col md="3">
<h5> <Label htmlFor="file-input"><strong>Image produit</strong></Label></h5>
</Col>
<Col xs="12" md="9">
<Input type="file" id="file-input" name="file-input" onChange={this.handleImgChange} />
</Col>
</FormGroup>
当我在前端运行它时,如您所见:
当我选择类别时,它没有被选择,它仍然在<option value="" hidden>Choisissez la catégorie</option>上,当我提交表单时,它将被插入到表格中但Nomcat有undefined值。
请问我该如何解决?
【问题讨论】:
-
formData.append('Nomcat', this.state.Nomcat);你错过了在 this 和 Nomcat 之间添加状态。
-
@javed 当我添加状态并运行它时,我得到`
Nomcat= \'[object Object],[object Object],[object Object],[object Object]\' ` -
为什么使用输入元素作为选择。如果可能的话,请使用 html 选择元素
-
还是一样的问题!当我选择时,它仍然在
<option value="" hidden>Choisissez la catégorie</option>上并返回Nomcat= \'[object Object],[object Object],[object Object],[object Object]\'
标签: javascript reactjs input axios react-select