【问题标题】:Update string based on switch case根据 switch case 更新字符串
【发布时间】:2021-05-12 07:45:26
【问题描述】:

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

App.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>
  );
}

Steps.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 中的&lt;ApptHeader /&gt; 组件中,我想根据 switch case 中呈现的组件来更改标题中字符串的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,我觉得我可能会编写冗余代码。提前致谢。

【问题讨论】:

    标签: javascript reactjs switch-statement


    【解决方案1】:

    你可以使用这样的模式

    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

    【讨论】:

    • 谢谢。这正是我所寻求的解决方案。
    • 很高兴为您提供帮助:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2012-05-01
    • 2019-03-31
    相关资源
    最近更新 更多