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

渲染React组件时出现意外令牌

裴浩歌
2023-03-14
问题内容

这是我的组件代码的片段:

renderEditor() {
    return (
      <FroalaEditor 
       base='https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.3.4'
       value={this.state.value} 
      />
    );    
}

render() {
    return (
      {this.renderEditor()}
    );
}

但是,当我运行此代码时,在出现意外的令牌错误{this.renderEditor()}。为什么会发生这种情况,我该如何解决?


问题答案:

您必须将方法调用包装在JSX元素中,否则Babel不会将return语句识别为JSX或在这种情况下为内联JSX表达式。它不会将您的代码从JSX转换为纯JavaScript,因此会出现错误。实际上,它被解释为
对象文字 ,而不是您期望的内联JSX表达式:

return (
    {this.renderEditor()} //interpreted as an object literal, `return ({ ... })`
    //   ^ The . here is an unexpected token in an object literal hence the error
);

解决方案是将其包装到一个元素中以告知Babel JSX,因此可以对其进行编译并{}正确解释。

return (
    <div>
        {this.renderEditor()}
    </div>
);

这将使方法的返回值成为的子级,<div>并且不会被解释为对象文字。而且,如果仅返回方法调用而没有其他任何同级,则可以完全删除()分组和<div>

return this.renderEditor();

这将防止代码首先被解释为对象文字,并且将返回作为组件的方法的返回值。

这也适用于其他情况,例如:

return (
  {foo}
);

由于()它是分组运算符,因此被解释为对象,并且只能包含表达式。对象文字是一个表达式,因此返回具有速记属性的对象文字。它可以减少和转换为:

return {
  foo: foo
};

这不是有效的React元素或为null,因此会发生错误。但是在这种情况下,如果foo不是有效的React元素, 则必须
将其包装在有效的React元素中-您不能只是这样做return foo。如果foo是数组,则必须将其包装在诸如之类的内容中,<div>因为render必须返回一个React元素或null,而数组都不是。



 类似资料:
  • 问题内容: 我可能会缺少装载机吗?我以为我们应该能够在组件主体中使用这些ES6函数,而不必执行语法reactdocs 我的.babelrc具有以下内容: 我正在使用js / jsx文档 问题答案: 您需要使用才能使用类字段,您可以像安装它 并将其用作插件 用于其余的传播语法,例如 根据 文档 : 提出了两个相关的建议:和 。 描述打算在类的实例上存在的属性(并且可以选择包括用于所述属性的初始化器表

  • 问题内容: 是否可以从外部源获取HTML / JSX内容并在React中动态呈现它?在我们的例子中,我们想从Wordpress API中获取内容,并在客户端和服务器上都进行渲染(我们正在使用NextJS) 因此,Wordpress API返回一个JSON响应,其中包括一个content属性,该属性是一串HTML / JSX。内容看起来像这样。 因此,如您所见,它将是HTML和React组件/ JS

  • 问题内容: 在React JSX中,似乎无法执行以下操作: 我收到一个解析错误:意外令牌{。这不是React可以处理的吗? 我正在设计此组件,以便在内部隐藏的值将包含有效的HTML元素(h1,p等)。有什么办法可以使这项工作吗? 问题答案: 您不应该将组件子弹放在花括号中: 这是一个有效的小提琴:http : //jsfiddle.net/kb3gN/6668/ 此外,您还可以找到JSX编译器,有

  • 问题内容: 我有一个React组件,其中有许多子组件。我不希望立即渲染子组件,而是要经过一段时间的延迟(对于每个子组件而言,它们是统一的还是不同的)。 我想知道-有没有办法做到这一点? 问题答案: 我认为最直观的方法是给孩子一个“ wait” ,在从父代传递过来的持续时间内隐藏该组件。通过将默认状态设置为隐藏,React仍会立即渲染组件,但是直到状态更改后它才可见。然后,您可以设置为调用一个函数,

  • 主要内容:React 实例,元素变量,React 实例,与运算符 &&,React 实例,三目运算符,阻止组件渲染,React 实例在 React 中,你可以创建不同的组件来封装各种你需要的行为。然后还可以根据应用的状态变化只渲染其中的一部分。 React 中的条件渲染和 JavaScript 中的一致,使用 JavaScript 操作符 if 或条件运算符来创建表示当前状态的元素,然后让 React 根据它们来更新 UI。 先来看两个组件: 我们将创建一个 Greeting 组件,它会根据用户

  • 问题内容: 我的代码导致了意外的重新渲染。 请注意第4行上的console.log。我期望以下内容被注销: 重新渲染0 重新渲染0 重新渲染1 第一个日志用于初始渲染。当通过按钮单击更改“ isOn”状态时,第二个日志用于重新渲染。第三个日志是setInterval调用setTimer时,因此它再次被重新渲染。这是我实际上得到的: 重新渲染0 重新渲染0 重新渲染1 重新渲染1 我不知道为什么还有