Reactjs 将最终形式重置为初始值

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

我对react final form有问题,它会在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>
  );
};
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>
  );
};

但是,发生这种情况的事实可能表明,您构建表单组件的方式还存在其他问题。。。但从您在此处放置的代码中看不到这一点。

父组件更新有问题,它也在更新子组件并设置初始值。。。