React:如何选择 select 选项的第一选择
React: How to pick the first choice of select option
在我的 React 应用程序中,我有一个 select 下拉输入。但是,每当我想在提交表单后填写表单时维护我的 Mpesa
选项的第一次出现 Mpesa
(甚至不单击该字段保持原样),我都会收到错误消息
mode(pin):['"" is not a valid choice.']
onChange
不会选择第一个选项,除非我单击另一个选项然后重新select 第一个选项。
表单组件
class FormInvoice extends Component {
state = {
invoiceOwner: "",
product: "",
quantity: "",
mode: "",
status: "",
payment_made: "",
payment_options: ["Mpesa", "Cash", "Bank", "Cheque"],
};
onChange = (e) =>
this.setState({
[e.target.name]: e.target.value,
});
render() {
return (
<div className="App container">
<Modal isOpen={this.props.newInvoiceModal} scrollable={true}>
<ModalBody>
<FormGroup>
<Label for="title">Product</Label>
<Input name="product" value={product} onChange={this.onChange} />
</FormGroup>
<FormGroup>
<Label for="title">Mode</Label>
<Input <==== Option
type="select"
name="mode"
value={mode}
onChange={this.onChange}
>
{this.state.payment_options.map((option, index) => (
<option key={index} value={option}>
{option}
</option>
))}
</Input>
</FormGroup>
</ModalBody>
<ModalFooter>
<button onClick={this.onSubmit} className="btn btn-primary">
Submit
</button>{" "}
<Button color="secondary" onClick={this.props.toggleModal}>
Cancel
</Button>
</ModalFooter>
</Modal>
</div>
);
}
}
export default connect(null, { addInvoiceData })(FormInvoice);
在class中使用componentDidMount设置state的初始值
componentDidMount(){
this.setState({mode: this.state.payment_options[0] })
}
如果函数使用 useEffect
const [mode, setMode] = useState("");
useEffect(()=>{
setMode(payment_options[0]);
},[])
因为您使用 mode
状态变量来跟踪下拉列表。你可以用想要的值初始化它的状态。
state = {
invoiceOwner: "",
product: "",
quantity: "",
mode: "Mpesa",
status: "",
payment_made: "",
payment_options: ["Mpesa", "Cash", "Bank", "Cheque"],
};
在我的 React 应用程序中,我有一个 select 下拉输入。但是,每当我想在提交表单后填写表单时维护我的 Mpesa
选项的第一次出现 Mpesa
(甚至不单击该字段保持原样),我都会收到错误消息
mode(pin):['"" is not a valid choice.']
onChange
不会选择第一个选项,除非我单击另一个选项然后重新select 第一个选项。
表单组件
class FormInvoice extends Component {
state = {
invoiceOwner: "",
product: "",
quantity: "",
mode: "",
status: "",
payment_made: "",
payment_options: ["Mpesa", "Cash", "Bank", "Cheque"],
};
onChange = (e) =>
this.setState({
[e.target.name]: e.target.value,
});
render() {
return (
<div className="App container">
<Modal isOpen={this.props.newInvoiceModal} scrollable={true}>
<ModalBody>
<FormGroup>
<Label for="title">Product</Label>
<Input name="product" value={product} onChange={this.onChange} />
</FormGroup>
<FormGroup>
<Label for="title">Mode</Label>
<Input <==== Option
type="select"
name="mode"
value={mode}
onChange={this.onChange}
>
{this.state.payment_options.map((option, index) => (
<option key={index} value={option}>
{option}
</option>
))}
</Input>
</FormGroup>
</ModalBody>
<ModalFooter>
<button onClick={this.onSubmit} className="btn btn-primary">
Submit
</button>{" "}
<Button color="secondary" onClick={this.props.toggleModal}>
Cancel
</Button>
</ModalFooter>
</Modal>
</div>
);
}
}
export default connect(null, { addInvoiceData })(FormInvoice);
在class中使用componentDidMount设置state的初始值
componentDidMount(){
this.setState({mode: this.state.payment_options[0] })
}
如果函数使用 useEffect
const [mode, setMode] = useState("");
useEffect(()=>{
setMode(payment_options[0]);
},[])
因为您使用 mode
状态变量来跟踪下拉列表。你可以用想要的值初始化它的状态。
state = {
invoiceOwner: "",
product: "",
quantity: "",
mode: "Mpesa",
status: "",
payment_made: "",
payment_options: ["Mpesa", "Cash", "Bank", "Cheque"],
};