javascript - 如何制作一个可重用的函数,以便我保持 DRY 的良好实践?

标签 javascript reactjs function

这是我的代码

  const renderEventStartEndDate = entry => {
    const { classes } = props;
    const isValidStartDate = isDateValid(entry.startDate);
    const isValidEndDate = isDateValid(entry.endDate);

    if (isValidStartDate && isValidEndDate && entry.startDate !== entry.endDate) {
      return (
        <div className={classes.textContainer}>
          {getFormattedEventDate(entry.startDate).toUpperCase()}

          {` TO ${getFormattedEventDate(entry.endDate).toUpperCase()}`}
        </div>
      );
    } else if (entry.startDate === entry.endDate && isValidStartDate && isValidEndDate) {
      return (
        <div className={classes.textContainer}>
          {getFormattedEventDate(entry.startDate).toUpperCase()}
        </div>
      );
    } else if ((isValidStartDate && !isValidEndDate) || (!isValidStartDate && isValidEndDate)) {
      if (isValidStartDate)
        return (
          <div className={classes.textContainer}>
            {getFormattedEventDate(entry.startDate).toUpperCase()}
          </div>
        );

      if (isValidEndDate)
        return (
          <div className={classes.textContainer}>
            {getFormattedEventDate(entry.endDate).toUpperCase()}
          </div>
        );
    }

我有一个应用程序,我想重用上面的代码,所以我特别希望减少这里的返回代码。我想制作一个如下所示的函数,然后在不同的组件中使用它。

export const isDateValid = date => {
  const dateObj = new Date(date);
  return !isNaN(dateObj.getTime());
};

最佳答案

很多重构需要,您可以首先将业务逻辑与 View 分离。就像解析日期和创建字符串一样。

示例:

const getDate = entry => {
  const isValidStartDate = isDateValid(entry.startDate);
  const isValidEndDate = isDateValid(entry.endDate);
  if (isValidStartDate && isValidEndDate && entry.startDate !== entry.endDate) {
    return `${getFormattedEventDate(
      entry.startDate
    ).toUpperCase()} TO ${getFormattedEventDate(entry.endDate).toUpperCase()}`;
  } else if (
    entry.startDate === entry.endDate &&
    isValidStartDate &&
    isValidEndDate
  ) {
    return `${getFormattedEventDate(entry.startDate).toUpperCase()}`;
  } else if (
    (isValidStartDate && !isValidEndDate) ||
    (!isValidStartDate && isValidEndDate)
  ) {
    if (isValidStartDate)
      return `${getFormattedEventDate(entry.startDate).toUpperCase()} `;
    if (isValidEndDate)
      return `${getFormattedEventDate(entry.endDate).toUpperCase()}`;
  }
};
const renderEventStartEndDate = entry => {
  const { classes } = props;
  return <div className={classes.textContainer}>{getDate(entry)}</div>;
};

关于javascript - 如何制作一个可重用的函数,以便我保持 DRY 的良好实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60970202/

相关文章:

reactjs - 调用 mutate 时 SWR 不重新渲染

javascript - 尝试从函数返回有效的电子邮件

php - 将从 javascript 返回的值传递给 php

javascript - Chrome : className attribute changing not working with GWT

javascript - 如何在javascript/jquery中实现这个键盘 Hook 功能?

javascript - 在没有 POST 的情况下处理 Remix.run 中的操作

javascript - 无法让 Android 设备成为 Worklight 应用程序部署的目标

reactjs - react 大日历同时发生多个事件

c - 用户自制的 fgets() 与标准库 fgets()

java - Java 是否有 "IN"运算符或类似 SQL 的函数?