【问题标题】:Material-UI dynamic Stepper componentMaterial-UI 动态 Stepper 组件
【发布时间】:2020-07-23 19:37:09
【问题描述】:

我想在用户点击ADD 时显示一个动态的Material-UI Stepper Component,这个步进器组件应该添加到 UI 中。 我可以动态添加步进器组件,但问题是当单击NEXTBACKSKIP 时,屏幕上所有添加的步进器组件都会相应移动。

例如,如果我在屏幕上有三个步进器组件。当我单击其中任何一个组件上的NEXT 按钮时,所有三个组件都将移动。

我不确定如何管理 Material-UI 步进器组件的useState

form.values.profile.map((x, idx) => {
  //Stepper Component rendering
})

【问题讨论】:

  • 嘿,你能提供一个带有最小可重现示例的代码框链接吗?

标签: reactjs material-ui


【解决方案1】:

为了让您的每个 Stepper 组件单独工作,您可以为每个 Stepper 组件维护单独的 activeStep 值。

像这样:

export default function App() {
  const [steppers, setSteppers] = useState([{ activeStep: 0 }]);

  const addForm = () => {
    setSteppers(steppers.concat({ activeStep: 0 }));
  };

  const updateActiveStep = (index, count) => {
    setSteppers(prev =>
      prev.map((stepper, i) => {
        if (i === index) {
          return { ...stepper, activeStep: stepper.activeStep + count };
        }

        return stepper;
      })
    );
  };

  const handleReset = index => {
    setSteppers(prev =>
      prev.map((stepper, i) => {
        if (i === index) {
          return { ...stepper, activeStep: 0 };
        }
        return stepper;
      })
    );
  };

  console.log("stepper", steppers);
  const stepperForms = steppers.map((stepper, index) => (
    <MyStepper
      activeStep={stepper.activeStep}
      handleReset={() => handleReset(index)}
      setActiveStep={count => updateActiveStep(index, count)}
    />
  ));
  return (
    <>
      <button onClick={addForm}>add form</button>
      {stepperForms}
    </>
  );
}

工作的动态多步骤表单实现在这里

https://codesandbox.io/s/upbeat-bhabha-i5wr2?file=/src/Stepper.js

另外,您可以在 Stepper 组件中维护 activeStep,以便 Stepper 的每个实例都使用自己的活动步值。

【讨论】:

  • 谢谢@gdh,但我正在使用FieldArrayFormik 组件来添加步进器。因此,当用户单击ADD 时,我将步进器推入数组,如图所示。如何在这样的数组中维护 activeState 或者我如何在该数组中使用steppers.map(..)
  • 我们如何实现删除。我在每个草原上都有REMOVE 按钮。我想在点击时删除它。
  • 我的每个步进屏幕上都有几个 TextField,当我移动 NEXT 并再次来到 BACK 时,我失去了先前状态的状态,我的意思是我失去了输入 TextField 的数据,如何保持每个状态的状态(BACKNEXT
猜你喜欢
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2018-07-08
  • 1970-01-01
相关资源
最近更新 更多