将一系列 If 正确转换为 R.cond
Convert a series of If to R.cond correctly
我有一系列的 If 语句。我想将它们转换为 Ramda 的条件,但我收到此错误,即 Never 未分配给 Element。所以,显然我做错了什么:
if (cond1) return <Comp1 />;
if (cond2) return <Comp2 />;
if (cond3) return <Comp3 />;
return <CompFinalGaurd />;
这是我所做的:
R.cond([
[cond1, () => <Comp1 />],
[cond2, () => <Comp2 />],
[cond3, () => <Comp3 />],
[R.T, () => <CompFinalGaurd />],
]);
我做错了什么?我的屏幕没有加载,因为我认为 cond
没有返回有效的 React 元素。但是如何解决呢?谢谢..
如果您尝试在两个片段中对 cond1
、cond2
、...使用相同的表达式,那么我理解这个问题。
Ramda 的 cond
采用谓词函数,而不是布尔表达式。它 returns 一个函数,你需要调用它来做任何有用的事情。
因此这个表达式
cond ([
[predicate1, consequent1],
[predicate2, consequent2],
[predicate3, consequent3],
[T, finalGuard],
])
对谓词和结果都采用函数。它将相同的参数传递给每个。它本质上等同于
(...args) =>
predicate1 (...args)
? consequent1 (...args)
: predicate2 (...args)
? consequent2 (...args)
: predicate3 (...args)
? consequent3 (...args)
: T (...args)
? finalGuard (...args)
: undefined // won't hit this since the final predicate always returns `true`
听起来这可以解释您的问题。如果没有,请 post 其他详细信息。
(免责声明:我是 Ramda 作者。)
我有一系列的 If 语句。我想将它们转换为 Ramda 的条件,但我收到此错误,即 Never 未分配给 Element。所以,显然我做错了什么:
if (cond1) return <Comp1 />;
if (cond2) return <Comp2 />;
if (cond3) return <Comp3 />;
return <CompFinalGaurd />;
这是我所做的:
R.cond([
[cond1, () => <Comp1 />],
[cond2, () => <Comp2 />],
[cond3, () => <Comp3 />],
[R.T, () => <CompFinalGaurd />],
]);
我做错了什么?我的屏幕没有加载,因为我认为 cond
没有返回有效的 React 元素。但是如何解决呢?谢谢..
如果您尝试在两个片段中对 cond1
、cond2
、...使用相同的表达式,那么我理解这个问题。
Ramda 的 cond
采用谓词函数,而不是布尔表达式。它 returns 一个函数,你需要调用它来做任何有用的事情。
因此这个表达式
cond ([
[predicate1, consequent1],
[predicate2, consequent2],
[predicate3, consequent3],
[T, finalGuard],
])
对谓词和结果都采用函数。它将相同的参数传递给每个。它本质上等同于
(...args) =>
predicate1 (...args)
? consequent1 (...args)
: predicate2 (...args)
? consequent2 (...args)
: predicate3 (...args)
? consequent3 (...args)
: T (...args)
? finalGuard (...args)
: undefined // won't hit this since the final predicate always returns `true`
听起来这可以解释您的问题。如果没有,请 post 其他详细信息。
(免责声明:我是 Ramda 作者。)