为了账号安全,请及时绑定邮箱和手机立即绑定

如何将多个函数合并为一个函数

如何将多个函数合并为一个函数

慕妹3242003 2023-02-24 16:13:37
我想知道我是否可以将以下功能优化为一个或两个功能而不是四个。这是代码的链接  // Proceed to next step  const firstStep = (firstName, lastName) => {    setInputValue((prevState) => ({      ...prevState,      step: prevState.step + 1,      firstName: firstName,      lastName: lastName,    }));  };  // Proceed to next step  const secondStep = (email, password) => {    setInputValue((prevState) => ({      ...prevState,      step: prevState.step + 1,      email: email,      password: password,    }));  };  const thirdStep = () => {    setInputValue((prevState) => ({      ...prevState,      step: prevState.step + 1,    }));  };  const fourthStep = () => {    setInputValue((prevState) => ({      ...prevState,      step: prevState.step + 2,    }));  };
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

一种方法是制作一个函数,给定步长增量计数和一个与现有状态合并的新对象,调用setInputValue所需的组合对象:


const setStep = (newProps, stepIncrement) => {

  setInputValue((prevState) => ({

    ...prevState,

    ...newProps,

    step: prevState.step + stepIncrement,

  }));

};

然后代替firstStep(firstName, lastName),你可以做setStep({ firstName, lastName }, 1),等等。


由于您使用的是挂钩,另一种选择是使用单独的状态变量和函数:


const [step, setStep] = useState(1);

const [firstName, setFirstName] = useState('');

// etc

const firstStep = (firstName, lastName) => {

  setFirstName(firstName);

  setLastName(lastName);

  setStep(step + 1);

};

const secondStep = (email, password) => {

  setEmail(email);

  setPassword(password);

  setStep(step + 1);

};

const thirdStep = () => setStep(step + 1);

const fourthStep = () => setStep(step + 2);


查看完整回答
反对 回复 2023-02-24
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

这是我试图解决您的困境的方法。


const nextStep = (newValues, incrementCount) => {

setInputValue((prevState) => ({

  ...prevState,

  ...newValues,

  step: prevState.step + (incrementCount ? incrementCount : 1)

}));

};

您可以在此处查看完整代码。



查看完整回答
反对 回复 2023-02-24
?
www说

TA贡献1775条经验 获得超8个赞

在我看来


const step = ({ firstName = "", lastName = "", email = "", password = "", step = 0 }) => {

  setInputValue(prevState => ({

    ...prevState,

    step: prevState.step + step,

    firstName: firstName || prevState.lastName,

    lastName: lastName || prevState.lastName,

    email: email || prevState.email,

    password: password || prevState.password

  }));

};


查看完整回答
反对 回复 2023-02-24
  • 3 回答
  • 0 关注
  • 225 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号