gpt4 book ai didi

javascript - JSX 中立即调用的函数表达式

转载 作者:数据小太阳 更新时间:2023-10-29 06:04:56 24 4
gpt4 key购买 nike

我正在处理 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>
);

最佳答案

这是 Immediately-invoked function expression .

Error With your code?

您需要将函数包装在 () 中,检查一下:

{
(() => {
if (this.props.status === 'PENDING') {
return (<div className="loading" />);
}
})()
}

what the pattern, "{()=>{}()}", is doing in this context?

我们不能直接将 if/else 语句或任何其他语句放入 JSX 中,因此为此我们需要创建一个函数并将所有逻辑放入其中。

根据 DOC :

if-else statements don't work inside JSX. This is because JSX is just syntactic sugar for function calls and object construction. If a ternary expression isn't robust enough, you can use if statements outside of your JSX to determine which components should be used. Or if you prefer a more "inline" aesthetic, define immediately-invoked function expressions inside your JSX.

另一种编写相同代码的方法:

render(){
return(
<div>
<div className="form-group">
....
</div>
{this._callFun()}
</div>
)
}

_callFun(){
if (this.props.status === 'PENDING') {
return (<div className="loading" />);
}
}

关于javascript - JSX 中立即调用的函数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45429836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com