为什么我无法选中Formik的复选框?

4

我正在尝试创建一个简单的Formik表单。第一次使用复选框。我可以渲染出复选框,但无法选中任何一个。问题出在哪里?

export default function App() {


 var lights = [{id:1, name:"a"}, {id:2, name:"a"}]
  return (<div>
    <h1>Select Lights</h1>
    <Formik
        initialValues={{
            checked: [],
        }}
        onSubmit={(eve) => this.submit(eve)}
    >
        {({values}) => (
            <form>
                
                <div id="checkbox-group">Checked</div>
                <div role="group" aria-labelledby="checkbox-group">
                    {lights.map((light) =>
                        <div>
                            <label>
                                <Field type="checkbox" key={light.id} name="checked" value={light.id}/>
                                {light.name}
                            </label>
                        </div>
                    )}
                </div>

                <button type="submit" onClick={(event => this.submit(event))}>Submit</button>
            </form>
        )}
    </Formik>
    </div>)
}
2个回答

7
复选框的值是数字似乎是问题所在。因为您将其初始化为数字,但在 Formik 跟踪复选框值时,它会被转换为字符串。请更改:
<Field type="checkbox" key={light.id} name="checked" value={light.id}/>

致:

<Field type="checkbox" key={light.id} name="checked" value={light.id.toString()}/>

0
在我的情况下,我使用了以下的useEffect:
  useEffect(() => {
    formik.resetForm()
    formik.setValues({
      ...formik.values,
      link: link.link,
      restrito: Boolean(link.restrito),
    })
  }, [link])

在这种情况下,将其链接到props中,并且在复选框中我使用它来更改复选框的值:
   <Checkbox
      {...formik.getFieldProps("restrito")}
      checked={formik.values.restrito ? true : false}
      onClick={() => formik.setFieldValue("restrito", !formik.values.restrito)}
      label="Restrito"
    />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接