【问题标题】:Getting error after installing date-fns dependency安装 date-fns 依赖项后出现错误
【发布时间】:2021-05-26 11:52:04
【问题描述】:

使用 > "npm install date-fns --save" 安装 date-fns 后出现此错误

尝试导入错误:“date-fns”不包含默认导出(导入为“dateFns”)。

我正在寻找一些解决方案,我需要更改我的导入名称但仍然无法正常工作。有人可以帮忙吗?

这是我的代码

import React, { useState } from "react";
import dateFns from "date-fns";
import "./Calendar.scss";

const Calendar = () => {
  const [currentDate, setCurrentDate] = useState(new Date());
  const [selectedDate, setSelectedDate] = useState(new Date());
  const header = () => {
    const dateFormat = "MMMM YYYY";
    return (
      <div className="header row flex-middle">
        <div className="column col-start">
          <div className="icon" onClick={prevMonth}>
            chevron_left
          </div>
        </div>
        <div className="column col-center">
          <span>{dateFns.format(currentDate, dateFormat)}</span>
        </div>
        <div className="column col-end">
          <div className="icon" onClick={nextMonth}>
            chevron_right
          </div>
        </div>
      </div>
    );
  };
  const days = () => {
    const dateFormat = "ddd";
    const days = [];
    let startDate = dateFns.startOfWeek(currentDate);
    for (let i = 0; i < 7; i++) {
      days.push(
        <div className="column col-center" key={i}>
          {dateFns.format(dateFns.addDays(startDate, i), dateFormat)}
        </div>
      );
    }
    return <div className="days row">{days}</div>;
  };
  const cells = () => {
    const monthStart = dateFns.startOfMonth(currentDate);
    const monthEnd = dateFns.endOfMonth(monthStart);
    const startDate = dateFns.startOfWeek(monthStart);
    const endDate = dateFns.endOfWeek(monthEnd);
    const dateFormat = "D";
    const rows = [];
    let days = [];
    let day = startDate;
    let formattedDate = "";
    while (day <= endDate) {
      for (let i = 0; i < 7; i++) {
        formattedDate = dateFns.format(day, dateFormat);
        const cloneDay = day;
        days.push(
          <div
            className={`column cell ${
              !dateFns.isSameMonth(day, monthStart)
                ? "disabled"
                : dateFns.isSameDay(day, selectedDate)
                ? "selected"
                : ""
            }`}
            key={day}
            onClick={() => onDateClick(dateFns.parse(cloneDay))}
          >
            <span className="number">{formattedDate}</span>
            <span className="bg">{formattedDate}</span>
          </div>
        );
        day = dateFns.addDays(day, 1);
      }
      rows.push(
        <div className="row" key={day}>
          {" "}
          {days}{" "}
        </div>
      );
      days = [];
    }
    return <div className="body">{rows}</div>;
  };
  const nextMonth = () => {
    setCurrentDate(dateFns.addMonths(currentDate, 1));
  };
  const prevMonth = () => {
    setCurrentDate(dateFns.subMonths(currentDate, 1));
  };
  const onDateClick = (day) => {
    setSelectedDate(day);
  };
  return (
    <div className="calendar">
      <div>{header()}</div>
      <div>{days()}</div>
      <div>{cells()}</div>
    </div>
  );
};
export default Calendar;

【问题讨论】:

    标签: javascript reactjs ecmascript-6


    【解决方案1】:

    进口是原因。该库不会导出单个“东西”。

    因此,您不能按照您的方式导入它。这就是你应该如何使用它:

    // just an example
    import { format, startOfWeek, addDays, subDays } from 'date-fns'
    
    // usage example
    <div className="column col-center" key={i}>
        {format(addDays(startDate, i), dateFormat)}
    </div>
    

    简而言之,直接导入你需要的就行了:)

    或者,您可以这样尝试(将所有内容作为对象导入):

    import * as dateFns from "date-fns";
    

    应该也可以工作,您不需要对代码进行任何其他更改。

    最后,好好解释一下JS导入/导出here。可能值得检查。)

    【讨论】:

    • 谢谢它的工作原理,但我仍然收到此错误“RangeError: Use d instead of D (in D) 将月份中的日期格式化为输入 Sun Apr 25 2021 00:00:00 GMT+0200 (Central European Summer Time)
    • @aleks 好的,请检查 this table 与接受的格式模式。我想说这是代码const dateFormat = "D"; 中的这一行,您需要将D(表示一年中的某一天,例如1、100、364)替换为d(一个月中的一天,例如一月的1-31)
    猜你喜欢
    • 2011-11-18
    • 2020-06-08
    • 1970-01-01
    • 2020-08-27
    • 2018-03-02
    • 1970-01-01
    • 2021-09-16
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多