【问题标题】:Formik reset button doesn't clear the formFormik 重置按钮不清除表单
【发布时间】:2020-11-03 12:28:04
【问题描述】:

我有以下几点:

    <Formik initialValues={{}} onSubmit={data => console.log(data)}>
        <Form className="h-full">
            <FieldsWrapper className="hide-scrolling-bar">
                {filters?.map(filter => (
                    <FiltersGroup
                        name={filter.label}
                        filters={filter.children}
                    />
                ))}
            </FieldsWrapper>

            <ButtonsWrapper>
                <Button type="submit" text="apply all" isPrimary />
                <Button
                    type="reset"
                    text="clear all"
                    isWishList
                    isPrimary={false}
                />
            </ButtonsWrapper>
        </Form>
    </Formik>

但是重置按钮不会清除表单

过滤器组组件

...
const FiltersGroup = ({filters, name}) => {
    const Checkbox = ({
        field: {name, value, onChange, onBlur},
        id,
        label,
        className,
        ...props
    }) => {
        return (
            <div className="flex">
                <input
                    name={name}
                    id={id}
                    type="checkbox"
                    value={label}
                    onChange={onChange}
                    onBlur={onBlur}
                    className="hidden"
                    {...props}
                />
                <SizeLabel htmlFor={id}>{label}</SizeLabel>
            </div>
        )
    }
    return (
        <div className="mb-10">
            <GroupLabel>{name}</GroupLabel>
            <div className="flex flex-wrap">
                {filters?.map(filter => (
                    <Field
                        component={Checkbox}
                        name={name}
                        id={`id-${filter}`}
                        label={filter}
                    />
                ))}
            </div>
        </div>
    )
}

export default FiltersGroup

【问题讨论】:

    标签: javascript reactjs formik


    【解决方案1】:

    将字段放入 Formik 标记后:

    <Formik
        initialValues={initialValues}
        validationSchema={validationSchema}
        validateOnBlur={false}
        validateOnChange={false}
        onSubmit={async (values, { resetForm }) => {
          await onSubmit(values)
    
          resetForm()
        }}
      >
        ....
    

    当你点击提交按钮时它会自动重置

    编辑: 示例:

    const initialValues = {
        name: ''
    }
                   <Formik
                        initialValues={initialValues}>
                        {formik => {
                            console.log('formik props', formik)
                            return (
                                <div>
                                    <h1>EDIT USER</h1>
                                    <Form>
                                    <Field name="name" type="text" />
                    <br/><br/><br/>
                                        <div>
                                            <button type="reset" onClick={()=>formik.resetForm()}>
                                                Reset All
                                            </button>
                                        </div>
                                    </Form>
                                </div >
                            )
                        }}
                    </Formik >
    

    在你的情况下:

    <Formik initialValues={{}} onSubmit={data => console.log(data)}>
    {formik => {
        <Form className="h-full">
            <FieldsWrapper className="hide-scrolling-bar">
                {filters?.map(filter => (
                    <FiltersGroup
                        name={filter.label}
                        filters={filter.children}
                    />
                ))}
            </FieldsWrapper>
    
            <ButtonsWrapper>
                <Button type="submit" text="apply all" isPrimary />
                <Button
                    type="reset"
                    text="clear all"
                    isWishList
                    isPrimary={false}
                    onClick={()=>formik.resetForm()}
                />
            </ButtonsWrapper>
        </Form>
    
    
    }}
    
    </Formik>
    

    【讨论】:

    • 有道理,但我还需要通过点击重置按钮而不提交表单来完成
    • 我已经用正确的答案编辑了评论,我已经对其进行了测试并且效果很好,请检查并告诉我。 InitialValues 是您必须首先声明的字段的初始值。它通过 formik 道具渲染并访问所有方法。我已经写了一个console.log,所以你可以检查一下
    • 你能检查我的答案,投票给它有用还是没用。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2012-05-10
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多