![](/img/trans.png)
[英]Is It Possible To Call A JavaScript Function Inside An Immediately-Invoked Function Expression
[英]Immediately-invoked function expression inside JSX
我正在研究我正在尝试编译的React项目,但无法找到我收到此语法错误的原因。 具体来说,模式“{()=> {}()}”在这种情况下是做什么的?
Module build failed: SyntaxError: Unexpected token, expected } (35:9)
33 | return (<div className="loading" />);
34 | }
35 | }()}
| ^
36 | </div>
37 | );
38 | }
@ ./src/containers/SearchApp.js 7:0-52
@ ./src/containers/App.js
@ ./src/index.js
@ multi ./src/index
代码部分:
render() {
return (
<div>
<div className="form-group">
<input onKeyDown={this.searchEnter.bind(this)} type="text" ref="tag" className="form-control input-lg search-bar" placeholder="Enter the tag..." />
<button onClick={this.searchClick.bind(this)} type="button" className="btn btn-default search-button">Search!</button>
</div>
{()=>{
if (this.props.status === 'PENDING') {
return (<div className="loading" />);
}
}()}
</div>
);
这是立即调用的函数表达式 。
您的代码出错?
你需要将函数包装在()中,检查:
{
(() => {
if (this.props.status === 'PENDING') {
return (<div className="loading" />);
}
})()
}
模式“{()=> {}()}”在这种情况下做了什么?
直接我们不能将if / else语句或任何其他语句放在JSX中,所以我们需要创建一个函数并将所有逻辑放在其中。
根据DOC :
if-else语句在JSX中不起作用。 这是因为JSX只是函数调用和对象构造的语法糖。 如果三元表达式不够健壮,您可以在JSX之外使用if语句来确定应该使用哪些组件。 或者,如果您更喜欢更“内联”的美学,请在JSX中定义立即调用的函数表达式 。
编写相同代码的另一种方法:
render(){
return(
<div>
<div className="form-group">
....
</div>
{this._callFun()}
</div>
)
}
_callFun(){
if (this.props.status === 'PENDING') {
return (<div className="loading" />);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.