我有这个条件;
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)),
答案 0 :(得分:2)
这是因为R.propSatisfies
与R.isEmpty
具有不同的方法签名。
对于第一种方法:
branch(R.propSatisfies(R.isEmpty, "repos"), renderComponent(Loader))
R.propSatisfies
函数正在评估输入对象(即从R.isEmpty
返回的对象)的属性("repos"
)上的函数(renderComponent(Loader)
)。
对于第二种方法:
// branch(R.isEmpty("repos"), renderComponent(Loader)),
您在这里所做的是直接致电R.isEmpty
。 R.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.isEmpty
,see this link
答案 1 :(得分:1)
R. IsEmpty
是一元函数,用于报告值是其类型的空值(例如,空字符串,空对象或空数组)。当您用"repos"
调用它时,您会得到false
,因为"repos"
不是空字符串。大概您调用的branch
函数想要一个谓词函数作为第一个参数,并且在您发送此布尔值时它会失败。同样,由于R. props
(您可能是说R.prop
顺便说一句,但同样的问题也会发生)是二进制函数,因此R.props("repos")
返回的函数不是空的,因此{{1} }返回false。
isEmpty
是一个三元函数,它接受谓词函数,属性名称和对象。当用R.propSatisfies
和isEmpty
调用它时,您将得到一个等待对象的函数。这将传递给"repos"
,一切都很好。
您是否有理由不喜欢branch
版本?