date-fns v2.x
提供 函数式编程 (FP)
友好函数,例如 lodash 中的函数,支持柯里化。
用法
FP函数
通过 date-fns/fp
子模块提供。
带有选项的函数 (format
、parse
等) 有两个 FP对应项
:一个将选项对象作为其第一个参数,另一个则没有。前者的名称末尾添加了 WithOptions。
在 date-fns 的 FP函数
中,参数的顺序是相反的。
js
import { addYears, formatWithOptions } from 'date-fns/fp';
import { eo } from 'date-fns/locale';
import toUpper from 'lodash/fp/toUpper'; // 'date-fns/fp' 与 'lodash/fp' 兼容!
// 如果 FP 函数没有收到足够的参数,它将返回另一个函数
const addFiveYears = addYears(5);
// 可以同时调用多个参数
const dateToString = formatWithOptions({ locale: eo }, 'd MMMM yyyy');
const dates = [
new Date(2017, 0 /* Jan */, 1),
new Date(2017, 1 /* Feb */, 11),
new Date(2017, 6 /* Jul */, 2)
];
const formattedDates = dates.map(addFiveYears).map(dateToString).map(toUpper);
//=> ['1 JANUARO 2022', '11 FEBRUARO 2022', '2 JULIO 2022']
使用函数组合
FP 函数的主要优点是支持函数式函数组合。
在上面的例子中,您可以将 addFiveYears
、dateToString
和 toUpper
组合成一个函数:
js
const formattedDates = dates.map((date) =>
toUpper(dateToString(addFiveYears(date)))
);
或者你可以使用 lodash 提供的 compose 函数以更惯用的方式执行相同操作:
js
import { compose } from 'lodash/fp/compose';
const formattedDates = dates.map(compose(toUpper, dateToString, addFiveYears));
或者如果你更喜欢自然的创作方向 (而不是计算正确的顺序),你可以使用 lodash 的流程:
js
import flow from 'lodash/fp/flow';
const formattedDates = dates.map(flow(addFiveYears, dateToString, toUpper));