【发布时间】:2019-11-28 06:19:30
【问题描述】:
我将 Ramda.js 用于选择器函数,以访问 Redux 存储中的数据。我想要的是将我的选择器定义为不引用选择器所作用的state 的函数,例如:
const getUserName = path(['user', 'name']);
const name = getUserName({
user: {
name: 'Some Name'
}
});
这对于简单的选择器来说很容易,但对于组合选择器来说有时会成为问题。
这是一个示例,其中一些 items 需要被解析,由对象上的 id 引用:
const getItemById = id => state => path(['items', id], state);
const getConnectedItemIds = obj => path(['items'], obj);
const getItemsFromObj = obj => state => {
const ids = getConnectedItemIds(obj);
return ids.map(id => getItemById(id)(state));
};
第一个函数不用state就可以很容易地表达出来,第二个函数不用obj,我相信这就是所谓的无点风格。但是没有state怎么写第三个函数呢?
我正在寻找如何使用 Ramda 重写第三个函数,以及有关此的规则和程序,例如(不知道是否为真):
所有组合函数都需要将 state 作为最后一个参数,才能在最终组合中将其拉出。
【问题讨论】:
标签: javascript redux functional-programming ramda.js