渲染没有返回任何内容.这通常意味着缺少return语句.或者,为了不渲染,返回null

pKa*_*Kay 52 javascript reactjs

我在React中有一个组件,我在index.js中导入,但它给出了这个错误:

渲染没有返回任何内容.这通常意味着缺少return语句.或者,为了不渲染,返回null

index.js:

import React from 'react';
import ReactDOM from 'react-dom'; 
import  Search_Bar from './components/search_bar';

const   API_KEY = 'AIzaSyCnpDObOLiiqN87YKJKZ-cxzdAsvYD1F-U';

const App = () => {
    return
    (
        <div>
            <Search_Bar />
         </div>
    );
}

ReactDOM.render(<App />, document.querySelector('#root'));
Run Code Online (Sandbox Code Playgroud)

零件:

import React from 'react';

const Search_Bar = () =>
{
    return <input />;
};

export default Search_Bar;
Run Code Online (Sandbox Code Playgroud)

dev*_*rav 88

我在render()方法中遇到了同样的问题.从render()返回时出现问题:

render() {
    return 
    (
        <div>Here comes JSX !</div>
    );
}
Run Code Online (Sandbox Code Playgroud)

即如果您在新行中开始括号

尝试使用:

render() {
    return (
        <div>Here comes JSX !</div>
    );
}
Run Code Online (Sandbox Code Playgroud)

这将解决错误

  • 哇,简直不敢相信没有编译器警告.谢谢,额外的换行格式是问题. (9认同)
  • 我怀疑这是自动分号插入的结果.它可能将第一个例子解析为"return;(...);" (7认同)
  • 这样简单的解决方案,可以解决我几个小时都在挣扎的问题。审查了我的代码很多次。 (2认同)
  • 哈哈哈,我只是浪费了很多时间来研究redux表单代码,并想知道“ connect”功能在最新版本中是否有所改变。 (2认同)
  • 这个问题花了我30分钟,谢谢你解决这个问题。 (2认同)

小智 19

鉴于您使用无状态组件作为箭头函数,内容需要括号"()"而不是括号"{}",您必须删除返回函数.

const Search_Bar= () => (
    <input />; 
);
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我的问题。在我路由到的组件中,我的 =&gt; 箭头后面有括号而不是括号。太习惯于标准的箭头函数 (2认同)

Die*_*ezú 13

问题在于回归,试试这个:

return(
);
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题


小智 11

This error can be seen for a number of reasons:

  1. As mentioned above, starting the parenthesis on a new line.

Error:

render() {
  return  
  (
    <div>I am demo data</div>
  )
}
Run Code Online (Sandbox Code Playgroud)

Correct way to implement render:

render() {
  return (
    <div>I am demo html</div>
  );
}
Run Code Online (Sandbox Code Playgroud)

In the above example, the semicolon at the end of the return statement will not make any difference.

  1. 也可能是由于路由中使用了错误的括号引起的:

错误:

export default () => {
  <BrowserRouter>
    <Switch>
      <Route exact path='/' component={ DemoComponent } />
    </Switch>
  </BrowserRouter>
}
Run Code Online (Sandbox Code Playgroud)

正确做法:

export default () => (
  <BrowserRouter>
    <Switch>
      <Route exact path='/' component={ DemoComponent } />
    </Switch>
  </BrowserRouter>
)
Run Code Online (Sandbox Code Playgroud)

在错误示例中,我们使用了花括号,但我们必须使用圆括号。这也给出了同样的错误。


小智 9

我也遇到了同样的问题nothing was returned from render

事实证明我的代码有大括号问题{}。我这样写我的代码:

import React from 'react';

const Header = () => {
    <nav class="navbar"></nav>
}

export default Header;
Run Code Online (Sandbox Code Playgroud)

它必须在()

import React from 'react';

const Header = () => (
    <nav class="navbar"></nav>
);

export default Header;
Run Code Online (Sandbox Code Playgroud)


小智 8

我在运行 Jest 测试时遇到了这个错误。其中一个组件在设置文件中被模拟,所以当我尝试在测试中使用实际组件时,我得到了非常意外的结果。

jest.mock("components/MyComponent", () => ({ children }) => children);
Run Code Online (Sandbox Code Playgroud)

删除这个模拟(实际上并不需要)立即解决了我的问题。

当您知道自己正确地从组件返回时,这可能会为您节省几个小时的研究时间。

  • 这正是我的问题所在!附带说明一下,如果您希望这种模拟仍然存在,我将其更改为: jest.mock("components/MyComponent", () =&gt; ({ Children }) =&gt; &lt;&gt;{children }&lt;/&gt;); 据我所知,这应该是上面代码片段的更安全版本,无论是否有儿童居住,都可以正常工作。 (3认同)

Kim*_*Kim 7

我遇到了这个线程来寻找这个错误的答案。

对我来说,奇怪的是,在 dev (npm start) 中运行时一切正常,但是在构建应用程序 (npm run build) 然后使用serve -s build.

事实证明,如果你在渲染块中有注释,如下所示,它会导致错误:

ReactDOM.render(
  <React.StrictMode>
    // this will cause an error!
    <Provider store={store}>
      <AppRouter />
    </Provider>
  </React.StrictMode>,
  document.getElementById("root")
);
Run Code Online (Sandbox Code Playgroud)

我正在分享以防其他人遇到同样问题的这个线程。


pKa*_*Kay 5

得到答案:我不应该在 之后使用括号 return ()。这有效:

return  <div> <Search_Bar /> </div>
Run Code Online (Sandbox Code Playgroud)

如果你想写多行,那么 return ( ...

您的起始括号应与return.


xam*_*mir 5

我们有一个包含在花括号中的组件,即{}

const SomeComponent = () => {<div> Some Component Page </div>}
Run Code Online (Sandbox Code Playgroud)

用圆括号 ie 替换它们()解决了问题:

const SomeComponent = () => (<div> Some Component Page </div>)
Run Code Online (Sandbox Code Playgroud)