React + Formik:使用嵌套对象的值

作者:编程家 分类: typescript 时间:2025-08-13

使用Formik和React可以轻松地构建复杂的表单,并管理表单中的输入值。在这篇文章中,我将向您展示如何使用Formik处理嵌套对象的值。嵌套对象是指在表单中有多个层级的值,例如表单中的一个字段是对象,而不仅仅是一个简单的字符串或数字。

首先,让我们看一下如何设置一个简单的表单,并使用Formik来管理它的值。考虑一个注册表单,其中包含用户名、密码和确认密码字段。我们可以使用Formik的`useFormik` hook来处理表单的值和提交逻辑。

javascript

import React from 'react';

import { useFormik } from 'formik';

const RegistrationForm = () => {

const formik = useFormik({

initialValues: {

username: '',

password: '',

confirmPassword: ''

},

onSubmit: values => {

console.log(values);

}

});

return (

id="username"

name="username"

type="text"

onChange={formik.handleChange}

value={formik.values.username}

/>

id="password"

name="password"

type="password"

onChange={formik.handleChange}

value={formik.values.password}

/>

id="confirmPassword"

name="confirmPassword"

type="password"

onChange={formik.handleChange}

value={formik.values.confirmPassword}

/>

);

};

export default RegistrationForm;

上面的代码中,我们使用`useFormik` hook来创建一个`formik`对象。`initialValues`属性指定了表单的初始值,包括`username`、`password`和`confirmPassword`字段。`onSubmit`属性定义了表单提交时要执行的逻辑。

在表单元素中,我们使用`formik.handleChange`来处理输入值的变化,并使用`formik.values`来获取当前表单的值。最后,我们在`form`元素上绑定了`formik.handleSubmit`来处理表单的提交。

这是一个简单的表单示例,现在让我们添加一个嵌套对象的值。考虑一个更复杂的表单,其中包含个人信息和地址信息。我们可以使用嵌套对象来表示这些值。

javascript

import React from 'react';

import { useFormik } from 'formik';

const RegistrationForm = () => {

const formik = useFormik({

initialValues: {

username: '',

password: '',

confirmPassword: '',

personalInfo: {

firstName: '',

lastName: '',

email: ''

},

address: {

street: '',

city: '',

state: '',

zipCode: ''

}

},

onSubmit: values => {

console.log(values);

}

});

return (

id="username"

name="username"

type="text"

onChange={formik.handleChange}

value={formik.values.username}

/>

id="password"

name="password"

type="password"

onChange={formik.handleChange}

value={formik.values.password}

/>

id="confirmPassword"

name="confirmPassword"

type="password"

onChange={formik.handleChange}

value={formik.values.confirmPassword}

/>

个人信息

id="firstName"

name="personalInfo.firstName"

type="text"

onChange={formik.handleChange}

value={formik.values.personalInfo.firstName}

/>

id="lastName"

name="personalInfo.lastName"

type="text"

onChange={formik.handleChange}

value={formik.values.personalInfo.lastName}

/>

id="email"

name="personalInfo.email"

type="email"

onChange={formik.handleChange}

value={formik.values.personalInfo.email}

/>

地址信息

id="street"

name="address.street"

type="text"

onChange={formik.handleChange}

value={formik.values.address.street}

/>

id="city"

name="address.city"

type="text"

onChange={formik.handleChange}

value={formik.values.address.city}

/>

id="state"

name="address.state"

type="text"

onChange={formik.handleChange}

value={formik.values.address.state}

/>

id="zipCode"

name="address.zipCode"

type="text"

onChange={formik.handleChange}

value={formik.values.address.zipCode}

/>

);

};

export default RegistrationForm;

在上面的代码中,我们在`initialValues`中添加了`personalInfo`和`address`字段,它们都是嵌套对象。在对应的表单元素中,我们使用`name`属性来指定嵌套对象的路径,例如`name="personalInfo.firstName"`。

现在,我们已经设置了一个包含嵌套对象的表单。当我们在表单中输入值时,Formik将自动更新相应的嵌套对象的值。我们可以在`onSubmit`回调函数中打印整个表单的值,以检查嵌套对象的值是否正确。

这就是使用Formik处理嵌套对象值的方法。通过使用嵌套对象,我们可以更好地组织和管理复杂的表单数据。希望这篇文章对您有所帮助,谢谢阅读!