gpt4 book ai didi

javascript - React Formik 不适用于数字输入

转载 作者:行者123 更新时间:2023-12-04 01:01:14 25 4
gpt4 key购买 nike

使用 FormikAnt Design ,这是一个简单的设置。

您可以在此处看到粘贴的整个代码:

import React from "react";
import ReactDOM from "react-dom";

import "./styles.css";

import { Formik } from "formik";
import { Form, Input, InputNumber } from "antd";

function App() {
const name = "name";
const count = "count";

return (
<div className="App">
<h1>Formik Testing</h1>

<Formik
initialValues={{ count: 32, name: "sd" }}
validate={async values => {
console.log("Validate", values);
return {
count: `Value ${values.count} is not valid.`
};
}}
onSubmit={(values, actions) => {
console.log(values);
}}
render={props => {
return (
<div>
<Form>
<Form.Item help={props.errors && props.errors[name]}>
<Input
id={name}
name={name}
type={"text"}
onChange={v => {
console.log("Text change ", v);
props.handleChange(v);
}}
onBlur={props.handleBlur}
defaultValue={props.initialValues[name]}
placeholder="Name"
/>
</Form.Item>
<Form.Item help={props.errors && props.errors[count]}>
<InputNumber
id={count}
name={count}
type={"number"}
onChange={v => {
console.log("Number change ", v);
props.handleChange(v);
}}
onBlur={props.handleBlur}
defaultValue={props.initialValues[count]}
placeholder="Count"
/>
</Form.Item>
</Form>
</div>
);
}}
/>
</div>
);
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

所以基本上:
  • handleChangeInputNumber 正确调用组件
  • 验证是 不是 数字字段更改时触发
  • 当文本字段更改时触发验证
  • onblur 时使用默认值触发验证(点击离开输入数字字段后)

  • 这似乎是一个错误,但我认为我做错了什么。

    任何帮助表示赞赏。

    代码在行动:

    https://codesandbox.io/s/gallant-architecture-0c8p2

    (预览 css 似乎有一个错误 - 如果您看到多个箭头,请仅使用顶部的箭头)

    最佳答案

    您可以使用 Formik 内置的 setFieldValue函数为输入定义您自己的更改处理程序,该处理程序将直接设置数字值:

               <InputNumber
    id={count}
    name={count}
    type={"number"}
    onChange={v => {
    props.setFieldValue(count, v);
    }}
    onBlur={props.handleBlur}
    defaultValue={props.initialValues[count]}
    placeholder="Count"
    />

    根据 the docs它还有第三个 bool 参数来确定是否运行验证。所以传入 truev 之后如果 validateOnChange 则应触发验证在主 Formik 上启用零件。

    关于javascript - React Formik 不适用于数字输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190020/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com