如何解决如何使用React Hooks存储语义UI选择输入的值?
因此,我正在尝试使用React钩子以组件状态存储来自一系列语义UI React输入的数据,但是在尝试存储Select输入的值时遇到了问题。
截至目前,我正在使用TypeScript,所以这是我必须考虑的问题(仍在学习如何处理打字等),并且对此特定部分有疑问。
这是到目前为止我组件所拥有的代码:
import React,{ useState } from 'react';
import { Form as SForm,Button,Grid,Icon,DropdownProps } from 'semantic-ui-react';
// CSS
import './form.scss';
export const Form = () => {
// Initial State (Set Fields,don't need values);
const initialState = {
name: '',email: '',topic: '',body: ''
};
// Options for Reason/Topic
const reasons = [
{ text: 'Question',value: 'Question' },{ text: 'Bug Report',value: 'Bug Report' },{ text: 'Feature Request',value: 'Feature Request' },{ text: 'Other',value: 'Other' }
];
// Handle updates (Stateful)
const handleChange = (event: React.ChangeEvent<HTMLInputElement>,data?: Object) => {
const { target } = event;
const { name,value } = target;
setValues({ ...values,[name]: value });
};
const handleSubmit = () => {
console.log(values);
}
const [ values,setValues ] = useState(initialState);
return (
<SForm onSubmit={handleSubmit}>
<SForm.Input
placeholder="Enter Name"
label="Name:"
name="name"
onChange={handleChange}
/>
<SForm.Input
placeholder="your@email.com"
label="E-Mail:"
name="email"
onChange={handleChange}
/>
<SForm.Select
label="Reason:"
placeholder="Please choose a reason!"
options={reasons}
onChange={handleChange}
/>
<Grid>
<Grid.Row columns={2}>
<Grid.Column>
<Button fluid animated color="green">
<Button.Content visible>Submit</Button.Content>
<Button.Content hidden>
<Icon name="arrow circle right" />
</Button.Content>
</Button>
</Grid.Column>
<Grid.Column>
<Button fluid secondary>Reset</Button>
</Grid.Column>
</Grid.Row>
</Grid>
</SForm>
);
};
因此,对于非选择输入,我可以只调用handleChange
,然后照常使用useState
将输入的值存储在组件状态中,但是我还没有弄清楚这如何与Select输入配合使用,因为我似乎无法(显然)使用现有的handleChange()
处理程序,因为它似乎需要与其他输入不同的参数集。
我需要为带有第二个参数的Select输入编写一个单独的处理程序吗?这是我能想到的唯一立即的解决方案,因为VSCode建议Select的onChange
需要使用第二个data
类型的DropdownProps
参数。
提前谢谢!这让我感到困惑,并且SUI文档没有提及这些内容,因为与React挂钩和状态管理一起使用似乎不在所述文档的范围之内。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。