使用对象数据类型反应 useState

Posted

技术标签:

【中文标题】使用对象数据类型反应 useState【英文标题】:React useState using object data type 【发布时间】:2022-01-05 03:55:07 【问题描述】:

所以我是 React 新手,目前正在处理表单。首先这是我写的全部代码:

 const [optionGender, setOptionGender] = useState(value: '', label: '');
 const options = [
     value: 'male', label:'male',
     value: 'female', label: 'female'
 ]

 return (
     <>
         <h3>Personal Information</h3>

         <Formik initialValues = 
             firstName: '',
             lastName: '',
             email: '',
             gender: optionGender,
             age: '',
         
             onSubmit = value => 
                 console.log(value);
                 // when the form is posted
             
             validationSchema = Yup.object(
                 firstName: Yup.string().required("This field is required")
             )
         >
             <Form>
                 <div className= "mb-3">
                     <label htmlFor = "firstName">First Name</label>
                     <Field name = "firstName" id = "firstName" placeholder = "First Name" className="form-control"/>
                     <ErrorMessage name = "firstName">msg => <div className = "text-danger"> msg</div></ErrorMessage>
                     <label htmlFor="lastName">Last Name</label>
                     <Field name = "lastName" id = "lastName" placeholder = "Last Name" className="form-control"/>
                     <label htmlFor="gender">Gender</label>
                     <Select name = "gender" id = "gender" placeholder = "Select ..." options = options onChange = (e) => 
                         setOptionGender(
                             value: e?.value
                             label: e?.label
                         )
                     />
                     <label htmlFor="email">Email</label>
                     <Field name = "email" id = "email" placeholder = "Email Address"className="form-control"/>
                     <label htmlFor="age">Age</label>
                     <Field name = "age" id = "age" placeholder = "Age" className="form-control"/>
                 </div>

                 <Button type = "submit"> Save Changes</Button>
                 <Link className = "btn btn-secondary" to = "/">Cancel</Link>
             </Form>
         </Formik>        
     </>
 )

基本上我正在尝试更改作为 value: sting, label:string 对象的选项值,并将新值传递给表单的性别变量。但是我有以下错误:

键入'字符串 | undefined' 不能分配给类型 'string'。 类型“未定义”不可分配给类型“字符串”.ts(2322)

问题出在代码中

                             value: e?.value
                             label: e?.label

有什么解决办法吗? 谢谢

【问题讨论】:

试试value: e?.value || '' 【参考方案1】:

为什么还要保存标签?

无论如何,为了调试,您可以记录您的事件以查看其结构:

onChange=(e) => 
  console.log(e);
  ...

由于我们不知道您使用什么 UI 框架来呈现组件(因此查看它们作为事件触发的内容),所以我只能给您我认为可行的内容:

onChange=(e) => setOptionGender(
  value: e.target.value,
  label: e.target.value
)

【讨论】:

以上是关于使用对象数据类型反应 useState的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 useState 设置对象数组的状态?

useState 与接口 - 反应本机打字稿

如何为 React 钩子(useState 等)做流类型注释?

如何使用 Typescript 和 useState 将类型对象设置为 React 的初始值?

具有 React useState 设置功能的打字稿类型的 Ramda 镜头组合

使用 JSON 数据输出数组数组而不是一个数组来反应 useState Hooks