gpt4 book ai didi

javascript - Preact 错误 : "objects are not valid as a child. Encountered an object with the keys {}" when using async await in root component

转载 作者:行者123 更新时间:2023-12-05 01:10:39 27 4
gpt4 key购买 nike

我是第一次使用 Preact。

我只是用 preact-cli 和这个默认模板创建了一个新项目:https://github.com/preactjs-templates/default .

app.js 我正在尝试使用此代码:

import { Router } from 'preact-router';

import Header from './header';
import Home from '../routes/home';
import Profile from '../routes/profile';

// I added this function
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

const App = async () => { // I added "async" and the "{" in this line
await sleep(3000) // I added this line

return ( // I added this line
<div id="app">
<Header />
<Router>
<Home path="/" />
<Profile path="/profile/" user="me" />
<Profile path="/profile/:user" />
</Router>
</div>
)
} // I added this line

export default App;

但不幸的是浏览器给了我错误:

Uncaught Error: Objects are not valid as a child. Encountered an object with the keys {}.

为什么?

如果我不使用 async/await,它会起作用。

最佳答案

免责声明:我致力于 Preact。

我们的调试插件 (preact/debug) 将在传递一个无效对象作为子对象时打印此错误,该对象与 h/createElement 的预期返回类型不匹配>,通常称为vnode:

const invalidVNode = { foo: 123 };
<div>{invalidVNode}</div>

在您的情况下,您的组件函数返回一个 Promise,它是 JavaScript 中的一个对象。当 Preact 渲染该组件时,渲染函数不会返回一个 vnode,而是一个 Promise。这就是错误发生的原因。

提出的问题:

如何进行异步初始化?

一旦触发,Preact 中的渲染过程始终是同步的。返回 Promise 的组件会破坏该契约。这样做的原因是因为您通常希望在异步初始化发生时至少向用户显示一些东西,例如微调器。例如,现实世界中的场景是通过网络获取数据。

import { useEffect } from "preact/hooks";

const App = () => {
// useEffect Hook is perfect for any sort of initialization code.
// The second parameter is for checking when the effect should re-run.
// We only want to initialize once when the component is created so we
// pass an empty array so that nothing will be dirty checked.
useEffect(() => {
doSometThingAsyncHere()
}, []);

return (
<div id="app">
<Header />
<Router>
<Home path="/" />
<Profile path="/profile/" user="me" />
<Profile path="/profile/:user" />
</Router>
</div>
)
}

关于javascript - Preact 错误 : "objects are not valid as a child. Encountered an object with the keys {}" when using async await in root component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63970864/

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