当前位置: 首页 > 面试题库 >

JSX内部立即调用的函数表达式

左丘涵畅
2023-03-14
问题内容

我正在尝试编译的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>
);

问题答案:

这是立即调用的函数expression。

您的代码有误?

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

{
   (() => {
      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" />);
    }
}


 类似资料:
  • 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为“自执行”,但作者后面说了很多,来说服大家称呼为“立即调用的函数表达式”。

  • 主要内容:1.将函数转换为IIFE,2.IIFE的要点这是一个JavaScript函数,它会在定义后立即运行。 可以使用IIFE(立即调用函数表达式)来避免从块内部进行变量吊装。 它允许公开访问方法,同时保留函数中定义的变量的私密性。 IIFE是一种设计模式,也称为自执行匿名函数。它包含两个主要部分: 第一部分是具有词法范围的匿名函数,该函数包含在分组运算符中。 第二部分创建IIFE,JavaScript引擎将通过该IIFE直接解释该函数。 语法:

  • 我没有看到这些构造使用很多,但我发现自己编写它们是为了在通常不会返回promise的函数中使用异步/等待 相对于 或 这是一件事吗?这里有我应该意识到的陷阱吗?在这种情况下使用async/wait的原因是什么?

  • 问题内容: 有一个JSLint选项(实际上是The Good Parts之一),它“需要避免立即调用”,这意味着构造 而是需要写成 我的问题是-谁能解释为什么第二种形式可能会更好?它更具弹性吗?容易出错?与第一种形式相比,它有什么优势? 自问了这个问题之后,我开始理解在功能值和功能值之间进行清晰的视觉区分的重要性。考虑一下立即调用的结果在赋值表达式的右侧的情况: 尽管从语法上讲,最外面的括号不是必

  • 为什么这在Node.js控制台(在4.1.1和5.3.0中测试)中工作,但在浏览器中不工作(在Chrome中测试)? 这个代码块应该创建并调用一个匿名函数,该函数记录。 另外,当上述操作在节点中工作时。js,这不起作用: 也不是这个: 奇怪的是,当添加参数时,它实际上会在立即调用的部分抛出一个。

  • 问题内容: 我想在一些嵌入式html中调用一个函数。我尝试了以下操作,但未调用该函数。这是在render方法中调用函数的错误方法吗? 问题答案: 要调用该函数,您必须添加