将一系列 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 元素。但是如何解决呢?谢谢..

如果您尝试在两个片段中对 cond1cond2、...使用相同的表达式,那么我理解这个问题。

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 作者。)