我有以下功能:

export function dateFormatter(date: string) {
  return moment(date).format("MM/DD/YYYY");
}

我有一个react组件,可以这样传递函数:
<TableColumn field="endDate" format={dateFormatter}>End Date</TableColumn>

该组件调用函数的方式如下:
const { format, field } = column.props;
if (format) {
  return format(cell);
}
return cell;

所有这些工作都很好。我现在想修改dateFormatter函数,以便可以有选择地向其传递参数。我不清楚该怎么做,因为如果我将引用改为:
<TableColumn field="endDate" format={dateFormatter("MM/YY")}>End Date</TableColumn>

它会将该格式作为日期传递到我的函数中。
我如何有选择地将参数传递给函数,然后再传递给它?

最佳答案

不是导出执行格式化的函数,而是导出生成函数的函数:

export function makeFormatter(format: string) {
  return function(date: string) {
    return moment(date).format(format || "MM/DD/YYYY");
  };
}

当您使用该函数时,您将以期望的格式插入到makeFormatter()的调用(或者没有得到默认值)。当然,为了方便起见,您可以预先制作几个不同的格式化函数:
var formatters = {
  mmddyyyy: makeFormatter("MM/DD/YYYY"),
  euro: makeFormatter("DD/MM/YYYY"),
  datetime: makeFormatter("MM/DD/YYYY hh:mm"),
  // etc
};

然后可以在代码中使用formatters.mmddyyyy来获取格式化程序。

10-05 20:47
查看更多