繁体   English   中英

根据 switch case 更新字符串

[英]Update string based on switch case

我正在 React 中创建一个多步骤表单,它使用 switch case 根据其 ID 呈现组件:

应用程序.js

function App() {
  const steps = [
    { id: 'location' },
    { id: 'questions' },
    { id: 'appointment' },
    { id: 'inputData' },
    { id: 'summary' },
  ];

  return (
    <div className="container">
      <ApptHeader steps={steps} />
      <Step steps={steps} />
    </div>
  );
}

步骤.js


const Step = ({ steps }) => {
  const { step, navigation } = useStep({ initialStep: 0, steps });
  const { id } = step;
  const props = {
    navigation,
  };
  console.log('StepSummary', steps);
  switch (id) {
    case 'location':
      return <StepLocation {...props} steps={steps} />;
    case 'questions':
      return <StepQuestions {...props} />;
    case 'appointment':
      return <StepDate {...props} />;
    case 'inputData':
      return <StepUserInputData {...props} />;
    case 'summary':
      return <StepSummary {...props} />;
    default:
      return null;
  }
};

在我的 App.js 中的<ApptHeader />组件中,我想根据 switch case 中呈现的组件更改 header 中字符串的Titlesubtitle

const SectionTitle = ({ step }) => {
  console.log('step', step);

  return (
    <div className="sectionWrapper">
      <div className="titleWrapper">
        <div className="title">Title</div>
        <div className="nextStep">
           SubTitle
        </div>
      </div>
      <ProgressBar styles={{ height: 50 }} />
    </div>
  );
};
export default SectionTitle;

我怎样才能做到这一点? 如果我必须为每个标题/副标题再次制作一个 switch case,我觉得我可能会编写冗余代码。 提前致谢。

你可以使用这样的模式

const steps = {
    location: { id: 'location', title: 'Location', component: StepLocation },
    questions: { id: 'questions', title: 'Questions', component: StepQuestions },
    appointment: { id: 'appointment', title: 'Appointment', component: StepDate },
    inputData: { id : 'inputData', title: 'InputData', component: StepUserInputData },
    summary: { id: 'summary', title: 'Summary', component: StepSummary },
};

然后在您的Steps.js中使用它时将变为

const Step = ({ steps }) => {
    const { step, navigation } = useStep({ initialStep: 0, steps });
    const { id } = step;
    const props = { navigation };

    const Component = steps[id].component; 
    return <Component {...props} steps={steps} />;
};

你的SectionTitle.js会变成这样

const SectionTitle = ({ step }) => {
    console.log('step', step);

    return (
        <div className="sectionWrapper">
            <div className="titleWrapper">
                <div className="title">Title</div>
                <div className="nextStep">{step.title}</div>
            </div>
            <ProgressBar styles={{ height: 50 }} />
        </div>
    );
};

export default SectionTitle;

这样可以避免代码冗余。

请务必更新代码的其他部分,例如useStep以接受和Object而不是和Array

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM