在 JSX 中,始终输出标签 A,在有变量 b 有值的时候,需要输出标签 B,你会怎么写这个逻辑?

2019-08-28 06:37:53 +08:00
 myljs

需求 RT,可能会有下面三种写法:

1:

function Demo() {
  if (b) {
    return <>
      <A />
      <B />
    </>
  }

  return <A />
}

2:

function Demo() {
  return <>
    <A />
    {b ? <B /> : null} // or {b && <B />}
  </>
}

3:

function Demo() {
  let result = [<A key="a" />];
  if (b) {
    result.push(<B key="b" />);
  }

  return result;
}

你会怎么选择?或者用什么其他的方法?以及为什么选择这样写?

1880 次点击
所在节点    问与答
14 条回复
Cbdy
2019-08-28 06:40:53 +08:00
{b && <B />}
官方推荐
fuermosi777
2019-08-28 06:51:20 +08:00
https://reactjs.org/docs/conditional-rendering.html
"it is up to you to choose an appropriate style based on what you and your team consider more readable."
Mutoo
2019-08-28 06:59:26 +08:00
其他的方法:
<Notification message={message} />

Notification = ({message})=>{
if(!message) return null;
/* render message */
}
topgrd
2019-08-28 07:31:04 +08:00
b && <B />
zcdll
2019-08-28 07:45:01 +08:00
2 中的后者,{b && <B />}
ChefIsAwesome
2019-08-28 08:03:22 +08:00
跟问人怎么写判断有什么区别?你写 switch,写个 map 查表,套层函数 /组件,不都行么。jsx 妙就妙在它还是 js。
forzalianjunting
2019-08-28 09:19:30 +08:00
2 后
Augi
2019-08-28 09:42:18 +08:00
@Cbdy 应该是{ !!b && <B>}
b 不是 bool 类型如果是数字 0 会打印出来
Cbdy
2019-08-28 09:53:18 +08:00
@Augi 你再仔细想一下
love
2019-08-28 10:08:44 +08:00
@Cbdy 是 0 的话是会打出数字啊
answeryou
2019-08-28 10:49:21 +08:00
@Cbdy 你应该再想一下
myljs
2019-08-28 11:30:48 +08:00
@Cbdy 是 0 的话,是会直接打出数字 !!b 更好,但实际上三元运算符 return null 才是最正统的,因为如果不想渲染任何东西,需要 return null https://reactjs.org/docs/conditional-rendering.html#preventing-component-from-rendering 而 !! 可能会返回组件本身 or false,当然 React 也处理了 false 的情况,用起来是没问题的。
Augi
2019-08-28 18:06:12 +08:00
@Cbdy 我想过了,你有本事试一下?
Cbdy
2019-08-28 18:39:51 +08:00
@Augi 我错了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/595703

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX