【问题标题】:Why is OnChange not working when used in Formik?为什么在 Formik 中使用 OnChange 时不起作用?
【发布时间】:2020-01-20 15:31:28
【问题描述】:

我正在尝试在 React 中将 Formik 用于虚拟应用程序。如果我将值作为道具,我将无法在任何一个输入框中输入任何内容。另一方面,如果我跳过 value 道具,那么我可以在框中输入,但在提交时不会反映为 value。

代码如下:

export default class DashboardPage extends React.Component {
    render() {
        return (
                    <Formik
                        initialValues={{ fname: "", lname: "" }}
                        onSubmit={(values) => {
                            alert(values.fname);
                        }}
                        render={({ values, handleChange, handleSubmit }) => (
                            <form onSubmit={handleSubmit}>
                               <input type="text" placeholder="First Name" name="fname" onChange={handleChange} value={values.fname} />
                               <input type="text" placeholder="Last Name" name="lname" onChange={handleChange} value={values.lname} />
                               <button type="submit>ADD<button/>
                            </form>
                        )}
                    />
        );
    }

}

我在这里可能大错特错,可能忽略了一个小错误,但感谢任何帮助/建议!

【问题讨论】:

  • 尝试将您写的内容作为 元素的子元素放入渲染道具中,方法与示例中相同:jaredpalmer.com/formik/docs/overview
  • handleChange从何而来?我认为你缺少道具?

标签: html reactjs formik


【解决方案1】:
export default class DashboardPage extends React.Component {
    render() {
        return (
                    <Formik
                        initialValues={{ fname: "", lname: "" }}
                        onSubmit={ (values) => alert(values.fname) }
                     >
                    { props => (
                      <React.Fragment>                     
                        <form onSubmit={handleSubmit}>
                            <input type="text" placeholder="First Name" name="fname" onChangeText={props.handleChange('fname')} />
                               <input type="text" placeholder="Last Name" name="lname" onChangeText={props.handleChange('lname')} />
                               <button type="submit>ADD<button/>
                            </form>
                        </React.Fragment>
                    )}
                 </Formik>
        )
    }
}

你好朋友,你能试试这个吗?

【讨论】:

  • 嘿@BOna,是的,它确实解决了这个问题。你能帮我做一件事吗,假设我想编写自己的 handleChane 函数,以便在将值存储在 Formik 状态之前屏蔽值或对值执行任何操作。可以做到吗?怎么样?
  • 您好,这个主题有一个答案:[stackoverflow.com/questions/48466920/… 请问您为什么要在将值存储在 Formik 的初始值中之前对其进行修改?如果是为了验证(密码长度,...),这不是怎么做的,你可能想照顾好。
  • 我也面临同样的问题,但不知道如何解决。你能看看这里吗? stackoverflow.com/questions/61689720/…
猜你喜欢
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多