Reactjs 将最终形式重置为初始值
我对react final form有问题,它会在3秒钟后重置值并恢复到初始值。。。调试耗时3天,但没有任何更改。。。这是代码。。。 任何想法和信息都会被篡改,谢谢Reactjs 将最终形式重置为初始值,reactjs,react-final-form,Reactjs,React Final Form,我对react final form有问题,它会在3秒钟后重置值并恢复到初始值。。。调试耗时3天,但没有任何更改。。。这是代码。。。 任何想法和信息都会被篡改,谢谢 const ChoiceQuestionFrom = ({ editMode = true, onSubmit = () => {}}) => { const handleValidations = (values) => { let errors = {}; if(!values.questi
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>
);
};
const ChoiceQuestionFrom=({editMode=true,onSubmit=()=>{}})=>{
const handleValidations=(值)=>{
让错误={};
如果(!values.question){
errors.question=“需要问题!”
}
返回错误;
}
返回(
{
提交时返回(值);
}}
render={u ChoiceQuestionFrom}
editMode={editMode}
初始值={{
键入:“问题”,
qType:“pollmotrichoice”,
问题:“,
答案:[{答案:,isCorrect:false}],
}}
验证={handleValidations}
/>
);
};
const\u ChoiceQuestionFrom=(道具)=>{
常数{
编辑模式,
价值观
提交,
格式:{change:onFormChange},
手推,
}=道具;
常量handleListEdit=(e,ind)=>{
const{value:answer}=e.currentTarget;
让currentAnswers=[…values.answers];
currentAnswers[ind]={…currentAnswers[ind],answer};
onFormChange(“答案”,currentAnswers);
};
常量handleDeleteItem=(ind)=>{
让currentAnswers=[…values.answers];
电流接头(ind,1);
onFormChange(“答案”,currentAnswers);
};
常量handleCheckboxChange=(ind)=>{
让currentAnswers=[…values.answers];
当前答案[ind]={
…当前答案[ind],
isCorrect:!currentAnswers[ind]。isCorrect,
};
onFormChange(“答案”,currentAnswers);
};
const handleQuestionStatementChange=(e)=>{
返回表单更改(“问题”,即目标值);
};
返回(
{values.answers.map((val,ind)=>(
handleDeleteItem(ind)}
onTextChange={(e)=>handleListEdit(e,ind)}
onCheckboxChange={()=>handleCheckboxChange(ind)}
textFullWidth={true}
textValue={val.answer}
选中={val.isCorrect}
已禁用={editMode}
outerStyle={styles.item}
/>
))}
onFormChange(“答案”[
…价值观。答案,
{答案:,isCorrect:false},
])
}
/>
);
};
大家好,我对react final form有问题,它会在3秒钟后重置值并恢复初始值。。。调试耗时3天,但没有任何更改。。。这是代码。。。
任何想法和信息都会被篡改,谢谢如果到目前为止您还没有解决它,您可以使用
keepdirtyon重新初始化
prop来完成。正如您在文档中看到的,它的目的是不覆盖您迄今为止所做的更改
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>
);
};
但是,发生这种情况的事实可能表明,您构建表单组件的方式还存在其他问题。。。但从您在此处放置的代码中看不到这一点。父组件更新有问题,它也在更新子组件并设置初始值。。。