不能在包含 JSX 元素的 map 循环中使用 if 表达式(taro/if-statement-in-map-loop)

规则详情

以下代码会被 ESLint 提示警告,同时在 Taro(小程序端)也不会有效:

  1. numbers.map((number) => {
  2. let element = null
  3. const isOdd = number % 2
  4. if (isOdd) {
  5. element = <Custom />
  6. }
  7. return element
  8. })

以下代码不会被警告,也应当在 Taro 任意端中能够运行:

  1. numbers.map((number) => {
  2. let isOdd = false
  3. if (number % 2) {
  4. isOdd = true
  5. }
  6. return isOdd && <Custom />
  7. })

解决方案

尽量在 map 循环中使用条件表达式或逻辑表达式。

  1. numbers.map((number) => {
  2. const isOdd = number % 2
  3. return isOdd ? <Custom /> : null
  4. })
  5. numbers.map((number) => {
  6. const isOdd = number % 2
  7. return isOdd && <Custom />
  8. })

当测试用例和线上项目都检测通过时,Taro 将很快(下一个 Minor 版本)支持这一特性。