Recharts tickFormatter 没有格式化日期

Recharts tickFormatter not formatting date

我有这样的日期结构

像这样的刻度格式化程序

  const formatXAxis = tickFormat => {
    return moment(tickFormat).format('DD/MM/YY');

}

我的图表看起来像这样

          <LineChart
        width={600}
        height={300}
        data={data.list}
        margin={{ top: 5, right: 20, bottom: 5, left: 0 }}
      >
        <Line 
          type="monotone" 
          dataKey="components.co" 
          stroke="#8884d8" />
        <XAxis
          dataKey="dt"
          tickFormatter={formatXAxis}
          domain={['dataMin', 'dataMax']}
          type="number"
        />
        <YAxis />
        <Tooltip />
      </LineChart>

但是当图表被呈现时它读入 dt 作为时间戳,但是转换器没有转换时间戳,它只是在每种情况下设置纪元开始日期

我看过其他人做同样事情的例子,但我看不出哪里错了。任何帮助表示赞赏。如果我遗漏了任何可能相关的信息,请告诉我。谢谢!

您的代码有几个问题。第一个是您要传递给组件的类型 属性。该类型不是数字,因为您将其格式化为字符串,您应该将其保留为未设置或使用值 category

<XAxis dataKey="dt" tickFormatter={(tick) => formatXAxis(tick)} type={'category'} />

第二个是你用时刻解析 unix 时间的方式。您需要首先告诉您正在向您的函数传递一个 unix 格式的值,如下所示:

const formatXAxis = (tickFormat) => {
  return moment.unix(tickFormat).format("DD/MM/YYYY");
};

反正我不太喜欢 moment.js,有点混乱,文档也不是很清楚。例如,我建议您使用日期 fns,这样处理日期会更容易。

我给你留了一个包含完整代码的codesandbox。