我正在学习 React,并尝试使用 Suspense。
首先,我尝试使用包装好的 Promise 对象作为道具。
包装器在未解决时抛出承诺。它永远循环。
然后我用useEffect尝试它,但它有同样的问题。
这是我的代码和沙箱。请教我如何解决这个问题。
textsandbox EternalLoop
* useEffect 块注释在沙盒中被淘汰,因为它永远循环。
import React, { Suspense, useEffect, useState } from "react";
const lazyTimer = () => {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(" from 10sec past");
}, 1000);
});
return promise;
};
const wrapPromise = promise => {
let status = "pending";
let result;
console.log("looping....");
const suspender = promise.then(
r => {
status = "fulfilled";
result = r;
},
e => {
status = "rejected";
result = e;
}
);
const read = () => {
if (status === "pending") {
throw suspender;
} else if (status === "rejected") {
throw result;
} else {
return result;
}
};
return { read };
};
const Hallo = () => {
const [text, setText] = useState("your on time");
// useEffect(
// setText(
// wrapPromise(lazyTimer()).read()
// ), [text],
// );
return <h2>hello world, {text}</h2>;
};
export default function App() {
return (
<div className="App">
<Suspense fallback={<p>Loading...</p>}>
<Hallo />
</Suspense>
</div>
);
}