如何根据另一个表单域动态显示Hide Formik表单域

时间:2019-10-16 10:02:58

标签: reactjs formik

我有一个用Formik编写的表格。我需要根据“选择”字段中选择的值(选项)来显示/隐藏“文本”字段。我怎样才能做到这一点?

<Formik
                                initialValues={{transactionCategory, name}}
                                onSubmit={this.onSubmit}
                                validateOnChange={false}
                                validateOnBlur={false}
                                validate={this.validate}
                                enableReinitialize={true}
                        >
                            {
                                (props) => (
                                        <Form>

                                            <fieldset className="form-group">
                                                <label>Category</label>
                                                <Field name="transactionCategory" component="select">
                                                    <option value="Admission">Admission</option>
                                                    <option value="Class_Fee">Class Fee</option>
                                                    <option value="Staff_Payment">Staff Payment</option>
                                                    <option value="Other">Other</option>
                                                </Field>
                                            </fieldset>

                                            <fieldset className="form-group">
                                                <label>Name</label>
                                                <Field className="form-control" type="text" name="name"/>
                                            </fieldset>

                                            <button className="btn btn-success" type="submit">Save</button>
                                            &nbsp;
                                            <button type="reset" className="btn btn-secondary">Reset</button>
                                        </Form>
                                )
                            }
                        </Formik>

当我从“类别”选项中选择“其他”值时,“名称”字段应隐藏。

2 个答案:

答案 0 :(得分:2)

根据选项的选定值编写选项的onSelect / onchange事件。更新状态字段。

  

this.setState({isName:true})

现在您可以在条件渲染中使用this.state.isName来显示和隐藏字段。

答案 1 :(得分:2)

使用transactionCategory值有条件地渲染名称字段

<Formik
    initialValues={{ transactionCategory, name }}
    onSubmit={this.onSubmit}
    validateOnChange={false}
    validateOnBlur={false}
    validate={this.validate}
    enableReinitialize={true}
>
    {props => (
        <Form>
            <fieldset className="form-group">
                <label>Category</label>
                <Field name="transactionCategory" component="select">
                    <option value="Admission">Admission</option>
                    <option value="Class_Fee">Class Fee</option>
                    <option value="Staff_Payment">Staff Payment</option>
                    <option value="Other">Other</option>
                </Field>
            </fieldset>

            {props.values.transactionCategory !== "Other" && (
                <fieldset className="form-group">
                    <label>Name</label>
                    <Field className="form-control" type="text" name="name" />
                </fieldset>
            )}

            <button className="btn btn-success" type="submit">
                Save
            </button>
            &nbsp;
            <button type="reset" className="btn btn-secondary">
                Reset
            </button>
        </Form>
    )}
</Formik>;