我遵循了an article written by Formik Team member的教程 但是事情没有按预期进行。每当我在文本输入字段中键入内容时,每次按下该键都会失去焦点,一次又一次,我必须单击文本输入字段以编写下一个字符。我分享了codesandbox链接。
这是摘自文章的代码
import React from 'react';
import { Formik, Form, Field, FieldArray } from 'formik';
export const InviteFriends = () => (
<div>
<h1>Invite Friends</h1>
<Formik
initialValues={{ friends: ['', '', ''] }}
onSubmit={values => alert(values)}
render={formikProps => (
<Form>
<Field name="email" />
<FieldArray
name="friends"
render={({ remove, push }) => (
<>
{formikProps.values.friends.map((friend, i) => (
<div key={`friend-${i}-${friend}`}>
<Field name={`friends[${i}]`} type="email" />
<button type="button" onClick={() => remove(i)}>
X
</button>
</div>
))}
<button type="button" onClick={() => push('')}>
Add friend
</button>
</>
)}
/>
<button type="submit">Invite Friends</button>
</Form>
)}
/>
</div>
);
答案 0 :(得分:1)
您代码中的问题出在关键属性模板:key={'friend-${i}-${friend}'}
中。道具更改时,该键对于同一组件应该是永久的。但是,在您的情况下,它包含${friend}
,这意味着按键会随着每次击键而变化。
解决方案:只需从密钥中删除${friend}
,使其对于同一项目保持不变。