TLDR;
第一种语义简单,节省字符数量,但是不能解决 falsy 的显示问题。比较适合 else 分支是不需要显示 Node 的情形。
第二种三元表达式,字符较多,上下文阅读压力大。可以根据条件选择渲染两种不同的 Node,不仅限于 null 。
写 JSX 还是要显示的写一些判断逻辑比较好。
“`
if (flag) {
return <NodeA />
}
return <NodeB />
“`
—
以下较长。
“`js
const a =() => flag && <div />
const b = () => flag ? <div /> : null
“`
两个方法会被 babel 编译成
“`
var a = function a() {
return flag && /*#__PURE__*/React.createElement(“div”, null);
};
var b = function b() {
return flag ? /*#__PURE__*/React.createElement(“div”, null) : null;
};
“`
看起来还是有差别。但是,编译成字节码,两种的操作是完全一致的。
“`
node –print-bytecode –eval “var a = function a() { return flag && /*#__PURE__*/React.createElement(“div”, null); };”
node –print-bytecode –eval “var b = function b() { return flag ? /*#__PURE__*/React.createElement(“div”, null) : null; };”
“`