我正在构建一个PO#录入系统,以输入PO编号,到期日期和优先级。采购订单编号和截止日期都应按原样进行更改,但优先级没有更改。
这是组件代码:
import React, { useState, useContext, useEffect } from 'react';
import M from 'materialize-css';
import OrderContext from '../../context/order/orderContext';
import AlertContext from '../../context/alert/alertContext';
const POEntry = () => {
const orderContext = useContext(OrderContext);
const alertContext = useContext(AlertContext);
const { submitPO } = orderContext;
const { setAlert } = alertContext;
const [newOrder, setNewOrder] = useState({
poNum: '',
dueDate: '',
priority: '',
});
const { poNum, dueDate, priority } = newOrder;
const onChange = (e) => {
setNewOrder({
...newOrder,
[e.target.name]: e.target.value,
});
};
const onSubmit = (e) => {
e.preventDefault();
if (poNum === '') {
setAlert('Please fill in all fields', 'danger');
} else {
console.log(poNum);
console.log(dueDate);
submitPO({
poNum,
dueDate,
priority,
});
}
};
useEffect(() => {
M.AutoInit();
// eslint-disable-next-line
}, []);
return (
<div className="row">
<form className="col s12" onSubmit={onSubmit}>
<div className="row">
<div className="col s12">
<div className="input-field col s4">
<i className="fas fa-archive prefix"></i>
<label htmlFor="poNum">Enter PO Number...</label>
<input
id="poNum"
name="poNum"
type="text"
value={poNum}
onChange={onChange}
/>
</div>
<div className="input-field col s4">
<i className="fas fa-calendar-day prefix"></i>
<input
id="dueDate"
name="dueDate"
type="date"
value={dueDate}
onChange={onChange}
/>
</div>
<div class="input-field col s4">
<select value={priority} onChange={onChange}>
<option value="low">Low Priority</option>
<option value="norm">Normal Priority</option>
<option value="high">High Priority</option>
</select>
<label>Priority Level</label>
</div>
</div>
</div>
<div className="col s12">
<button className="btn btn-primary btn-block">Submit PO</button>
</div>
</form>
</div>
);
};
export default POEntry;
重申一下,状态中的poNum
和dueDate
状态变量已正确更改,但是当我选择一个priority
时,它将创建一个标记为:
的新状态值而不是更新priority
的值。
这可能很容易,但我的智慧到此为止。救命!
答案 0 :(得分:2)
您缺少优先级选择的name
属性。
您需要这样做:
<select value={priority} onChange={onChange} name="priority">
<option value="low">Low Priority</option>
<option value="norm">Normal Priority</option>
<option value="high">High Priority</option>
</select>