为什么这不适用于recompose和ramda?

时间:2018-09-05 00:04:58

标签: reactjs ramda.js recompose

我有这个条件;

   branch(R.propSatisfies(R.isEmpty, "repos"), renderComponent(Loader)),
// branch(R.isEmpty("repos"), renderComponent(Loader)),

有什么区别,为什么第二个人给我一个错误? test is not a function

与此相同的结果:

branch(R.isEmpty(R.props("repos")), renderComponent(Loader)),

2 个答案:

答案 0 :(得分:2)

这是因为R.propSatisfiesR.isEmpty具有不同的方法签名。

对于第一种方法:

branch(R.propSatisfies(R.isEmpty, "repos"), renderComponent(Loader))

R.propSatisfies函数正在评估输入对象(即从R.isEmpty返回的对象)的属性("repos")上的函数(renderComponent(Loader))。

对于第二种方法:

// branch(R.isEmpty("repos"), renderComponent(Loader)),

您在这里所做的是直接致电R.isEmptyR.isEmpty方法需要一个数组,如果提供的数组为空,则返回true。 R.isEmpty无法确定对象中的属性(即“回购”)是否为空。为了使可视化更容易,请考虑以下几点:

// Your second approach:
branch(R.isEmpty("repos"), renderComponent(Loader))

// ...which when expanded, is equivalent to this. You can now see it 
// shows incorrect usage of R.isEmpty
branch(component => R.isEmpty("repos")(component), renderComponent(Loader))

希望这提供了一些说明-有关R.isEmptysee this link

的更多信息

答案 1 :(得分:1)

R. IsEmpty是一元函数,用于报告值是其类型的空值(例如,空字符串,空对象或空数组)。当您用"repos"调用它时,您会得到false,因为"repos"不是空字符串。大概您调用的branch函数想要一个谓词函数作为第一个参数,并且在您发送此布尔值时它会失败。同样,由于R. props(您可能是说R.prop顺便说一句,但同样的问题也会发生)是二进制函数,因此R.props("repos")返回的函数不是空的,因此{{1} }返回false。

另一方面,

isEmpty是一个三元函数,它接受谓词函数,属性名称和对象。当用R.propSatisfiesisEmpty调用它时,您将得到一个等待对象的函数。这将传递给"repos",一切都很好。

您是否有理由不喜欢branch版本?