当前位置: 首页 > 知识库问答 >
问题:

React警告:函数作为React子级无效。如果从render返回一个组件而不是< Component />,可能会发生这种情况

姬弘文
2023-03-14

我正在尝试使用此自定义钩子,从路由中为我带来本地消息

import { useState } from 'react';
import axios from 'axios';

const useLocalFlashMessages = () => {
    const [LocalFlashMessage, setLocalFlashMessage] = useState();

    const handleMessages = async () => {
        setLocalFlashMessage(await axios.get('http://localhost:3000/localFlashMessages/'))
        return LocalFlashMessage
    };
    return [
        LocalFlashMessage,
        handleMessages
    ]
}

export default useLocalFlashMessages

因此,当我尝试从应用程序中的这个钩子调用“handleMessage”函数时。js组件,出现以下警告:警告:函数作为React子函数无效。如果返回组件而不是从渲染返回组件,则可能会发生这种情况。或者你想调用这个函数而不是返回它。

有我的App.js:

import './css/Header.css';
import Body from './components/Body';
import Footer from './components/App/Footer';
import useLocalFlashMessages from './hooks/useLocalFlashMessages';

function App() {
  const [LocalFlashMessage, handleMessages] = useLocalFlashMessages()
  console.log(LocalFlashMessage)
  
  return (
    <div className="Main">
      <main className="Main-body">
        {LocalFlashMessage ? <div> {LocalFlashMessage}</div> : <div>{handleMessages}</div>}
        <Body />
      </main>
      <footer className="Main-footer">
        <Footer />
      </footer>
    </div>
  );
}

export default App;

我能做些什么来解决这个问题?

共有2个答案

窦志新
2023-03-14

问题解决了。多亏了这些评论,我已经使用useEffects()挂钩重组了我的本地消息sistem。现在我的sistem与一个名为“ShowLocalMessages”的组件一起工作,该组件从本地存储接收消息数据并使用它更新其状态。如果存在本地消息,它将显示它。

常献
2023-03-14

await axios 返回一个对象,您尝试将其呈现为组件。你不能在 React 中执行此操作。

我认为您正在寻找的是输出来自axios调用的消息,该消息将在< code>data字段中

const resp = await axios.get('http://localhost:3000/localFlashMessages/');
setLocalFlashMessage(resp.data);
return resp.data

这条线上还有一个问题:

{LocalFlashMessage ? <div> {LocalFlashMessage}</div> : <div>{handleMessages}</div>}

handleMessage将返回一个作为函数而不是反应函数的Promise。您需要在useEffects或其他帮助函数中调用它,然后只渲染LocalFlashMessage而不是

 类似资料: