Formik - 如何在一个字段更改时自动控制另一个输入字段的值?
Formik - How do I control the value of another input field automatically when one field changes?
我正在使用 Formik 的 useFormik
挂钩来管理我在 ReactJS 中的表单。但我不知道如何构建一个在 Formik 的 handleChange
函数之上或与其一起工作的自定义 onChange 处理程序。我尝试构建如下所示的自定义更改处理程序,但我无法弄清楚下一步要采取什么步骤。
import React from "react";
import { useFormik } from "formik";
function testForm() {
const { handleChange, values } = useFormik({
initialValues: { title: ``, slug: `` },
onSubmit: ( values ) => console.log( values )
})
const customHandleChange = e => {
// let's suppose title field changed.
const { value } = e.target;
// I can do other functions here, like fetching data from API
store.dispatch( getUserByTitle( value ))
// But I'm trying to set a custom value for the slug field automatically depending on changing title field value
let slugValue = value.toLowerCase()
// handleChange function changes the value of title input. How do I also change slug input?
handleChange(e)
}
return (
<div>
<input type="text"
name="Title"
value={ values.title }
onChange={ customHandleChange }/>
<input type="text"
name="slug"
value={ values.slug }
onChange={ handleChange } />
</div>
)
}
我试过如下直接设置slug输入的值。
<input type="text"
name="slug"
value={ values.title.toLowerCase() }
onChange={ handleChange } />
但如果我这样做,我将无法在该字段中键入内容并进行更改,因为该值是严格根据标题输入设置的。用户还应该能够将 slug 字段值更改为他们想要的任何值。
尝试使用 setFieldValue:
function testForm() {
const { handleChange, values, setFieldValue } = useFormik({
initialValues: { title: ``, slug: `` },
onSubmit: ( values ) => console.log( values )
})
const customHandleChange = e => {
const { value } = e.target;
setFieldValue('title', value);
setFieldValue('slug', value.toLowerCase());
}
return (
<div>
<input type="text"
name="Title"
value={ values.title }
onChange={ customHandleChange }/>
<input type="text"
name="slug"
value={ values.slug }
onChange={ handleChange } />
</div>
)
}
我正在使用 Formik 的 useFormik
挂钩来管理我在 ReactJS 中的表单。但我不知道如何构建一个在 Formik 的 handleChange
函数之上或与其一起工作的自定义 onChange 处理程序。我尝试构建如下所示的自定义更改处理程序,但我无法弄清楚下一步要采取什么步骤。
import React from "react";
import { useFormik } from "formik";
function testForm() {
const { handleChange, values } = useFormik({
initialValues: { title: ``, slug: `` },
onSubmit: ( values ) => console.log( values )
})
const customHandleChange = e => {
// let's suppose title field changed.
const { value } = e.target;
// I can do other functions here, like fetching data from API
store.dispatch( getUserByTitle( value ))
// But I'm trying to set a custom value for the slug field automatically depending on changing title field value
let slugValue = value.toLowerCase()
// handleChange function changes the value of title input. How do I also change slug input?
handleChange(e)
}
return (
<div>
<input type="text"
name="Title"
value={ values.title }
onChange={ customHandleChange }/>
<input type="text"
name="slug"
value={ values.slug }
onChange={ handleChange } />
</div>
)
}
我试过如下直接设置slug输入的值。
<input type="text"
name="slug"
value={ values.title.toLowerCase() }
onChange={ handleChange } />
但如果我这样做,我将无法在该字段中键入内容并进行更改,因为该值是严格根据标题输入设置的。用户还应该能够将 slug 字段值更改为他们想要的任何值。
尝试使用 setFieldValue:
function testForm() {
const { handleChange, values, setFieldValue } = useFormik({
initialValues: { title: ``, slug: `` },
onSubmit: ( values ) => console.log( values )
})
const customHandleChange = e => {
const { value } = e.target;
setFieldValue('title', value);
setFieldValue('slug', value.toLowerCase());
}
return (
<div>
<input type="text"
name="Title"
value={ values.title }
onChange={ customHandleChange }/>
<input type="text"
name="slug"
value={ values.slug }
onChange={ handleChange } />
</div>
)
}