在React.js中创建下拉菜单时为何要使用null?未添加会触发解析错误
为什么React条件渲染的分支里需要用
null? 在React的JSX语法里做条件渲染时,像你写的下拉菜单例子那样,else分支返回null其实是为了同时满足语法规范和React的渲染规则,具体原因可以拆成两点来说:
1. 保证JSX的语法完整性
JSX本质是React.createElement()调用的语法糖,当你在花括号{}里写表达式时,这个表达式必须结构完整且能返回合法值。
如果你的三元表达式else分支空着不写,比如写成:
{this.state.displayMenu ? ( <ul>...</ul> ) : }
这会直接触发解析错误——三元表达式的语法要求condition ? expr1 : expr2必须完整,expr2不能缺失。JSX解析器会把这段代码判定为无效语法,自然就报错了。
2. 符合React对“无内容渲染”的规范
React允许组件或渲染表达式返回null,这时候它会明确理解为“此处不需要渲染任何DOM元素”,不会生成任何节点。这是React官方支持的标准写法,用来清晰表示“条件不满足时,没有内容要展示”。
回到你给出的下拉菜单代码:
render() { return ( <div className="dropdown" style={{background:"Red",width:"2000px"}} > <div className="button" onClick={this.showDropdownMenu}> User Info</div> {this.state.displayMenu ? ( <ul> <li><a className="active" href="#Orders">Orders</a></li> <li><a href="#Payment Details">Payment Details</a></li> <li><a href="#Your Address">Your Address</a></li> <li><a href="#Your Profile">Profile</a></li> <li><a href="#Activity">Activity</a></li> <li><a href="#Setting">Setting</a></li> <li><a href="#Log Out">Log Out</a></li> </ul> ): ( null )} </div> ); }
当this.state.displayMenu为false时,返回null既补全了三元表达式的语法结构,又明确告诉React“这里不需要渲染任何内容”,完美适配了下拉菜单隐藏的需求。
顺便提一句:除了null,你也可以返回undefined或者false,React都会忽略它们不渲染,但null是最直观的写法,能清晰表达“无内容”的意图。
内容的提问来源于stack exchange,提问作者Sanjeev Kumar
相关产品推荐
相关产品推荐

