reactjs - React 最终形式重置为初始值
问题描述
我对反应最终形式有问题,它会在 3 秒后重置值并恢复到初始值……调试了 3 天,但没有任何变化……这是代码……任何想法和信息都会受到影响,谢谢
const ChoiceQuestionFrom = ({ editMode = true, onSubmit = () => {}}) => {
const handleValidations = (values) => {
let errors = {};
if(!values.question){
errors.question = "Question Required !"
}
return errors;
}
return (
<Form
onSubmit={(values) => {
return onSubmit(values);
}}
render={_ChoiceQuestionFrom}
editMode={editMode}
initialValues={{
type: "question",
qType: "pollMultiChoice",
question: "",
answers: [{ answer: "", isCorrect: false }],
}}
validate={handleValidations}
/>
);
};
const _ChoiceQuestionFrom = (props) => {
const {
editMode,
values,
submitting,
form: { change: onFormChange },
handleSubmit,
} = props;
const handleListEdit = (e, ind) => {
const { value: answer } = e.currentTarget;
let currentAnswers = [...values.answers];
currentAnswers[ind] = { ...currentAnswers[ind], answer };
onFormChange("answers", currentAnswers);
};
const handleDeleteItem = (ind) => {
let currentAnswers = [...values.answers];
currentAnswers.splice(ind, 1);
onFormChange("answers", currentAnswers);
};
const handleCheckboxChange = (ind) => {
let currentAnswers = [...values.answers];
currentAnswers[ind] = {
...currentAnswers[ind],
isCorrect: !currentAnswers[ind].isCorrect,
};
onFormChange("answers", currentAnswers);
};
const handleQuestionStatementChange = (e) => {
return onFormChange("question", e.target.value);
};
return (
<form onSubmit={handleSubmit}>
<QuestionStatement
value={values.question}
onChange={handleQuestionStatementChange}
outerStyles={styles.questionStatement}
/>
<JunoTypography variant="h2" style={{marginBottom: 10}}><FormattedMessage id="ChoiceQuestionForm.AddChoices" defaultMessage="Add Choices" /></JunoTypography>
{values.answers.map((val, ind) => (
<FieldCheckListItem
key={ind} // change with id
onDelete={() => handleDeleteItem(ind)}
onTextChange={(e) => handleListEdit(e, ind)}
onCheckboxChange={() => handleCheckboxChange(ind)}
textFullWidth={true}
textValue={val.answer}
checked={val.isCorrect}
disabled={editMode}
outerStyle={styles.item}
/>
))}
<div className="flex" style={styles.buttonsContainer}>
<DesignedRoundDashedButton
type="button"
label={
<FormattedMessage
id="ChoiceQuestionForm.AddAnswer"
defaultMessage="Add Answer"
/>
}
onClick={() =>
onFormChange("answers", [
...values.answers,
{ answer: "", isCorrect: false },
])
}
/>
<FieldButton
color="primary"
variant="contained"
submitting={submitting}
type="submit"
style={styles.saveBtn}
>
<FormattedMessage id="Question.Save" defaultMessage="Save" />
</FieldButton>
</div>
</form>
);
};
大家好,我的反应最终形式有问题,它会在 3 秒后重置值并恢复为初始值……调试了 3 天,但没有任何变化……这是代码……任何想法和信息都会受到影响, 谢谢
解决方案
如果你到目前为止还没有解决它,你可以使用keepDirtyOnReinitialize
prop 来解决它。正如您在文档中看到的那样,https://final-form.org/docs/react-final-form/types/FormProps#keepdirtyonreinitialize它的目的是不覆盖您迄今为止所做的更改。
但是,发生这种情况的事实可能表明您构建表单组件的方式存在其他问题......但这在您放置在此处的代码中不可见。
推荐阅读
- algorithm - 如何根据变量将 1 个集合平衡到多个其他集合?
- java - 为什么我无法将以下字符串作为输入并将其添加到 ArrayList?
- asp.net - 无法将日期转换为正确的格式
- android - Android 双向数据绑定 Float 到 EditText
- javascript - 异步函数不等待
- database - 将 ?input 映射作为 Datomic 查询参数传递
- python - 使用python的Windows多显示器设置脚本
- ilog - 一个决策表中的输入值应在另一个决策表中显示为下拉列表
- python - 从一个文件中读取多个 json
- dataframe - 从数据框中提取所有日期