将 setTimeout 添加到加载中
react add setTimeout to loading
我正在使用 React 来获取数据并将其显示在我的应用程序中。如果我正在加载,我会显示消息:“正在加载...”。
我想要的是使用 setTimeout()
将加载消息显示的时间比应有的多几秒钟。但是我不知道如何在反应中写这个。
我的代码:
export default function JobList() {
const {loading ,error , jobs} = useFetch();
return (
<div>
{loading && <p> Loading </p>} //HOW DO I USE SETTIMEOUT ON THIS <P> ELEMENT ?
{jobs && jobs.map(j=>return <p> {j.title} </p>)}
</div>
);
}
export default function JobList() {
const [isLoading, setIsLoading] = useState(false)
const {loading ,error , jobs} = useFetch();
useEffect(() => {
if (loading) {
setIsLoading(true)
}
if (!loading) {
setTimeout(() => {
setIsLoading(false)
}, 2000)
}
}, [loading])
return (
<div>
{isLoading && <p> Loading </p>}
{!isLoading && jobs?.map(j=>return <p> {j.title} </p>)}
</div>
);
}
使用 useState 挂钩创建一个名为 isLoading 的状态。使用它有条件地渲染 Loading component/spinner.
setIsLoading
每次 loading
更改时都会在 useEffect
中调用。因此,如果您在 useEffect 中添加 setTimeout
,它将在 2000 毫秒后从 true 变为 false。
这假设从 useFetch 加载是一个布尔值。
此外,如果您使用的是 ES2020,则可以在 jobs.map 渲染中使用可选链接。您可以避免编写额外的支票。
这是一个解决方案,您应该尝试类似的方法。
export default function JobList() {
const [loading, setLoading] = useState(true);
const request = useFetch('https://example.com')
request.post('/todos', {
any: 'data'
}).then(response => {
settimeout(() => {
setLoading(false)
}, 1000 ) // here you can set delay
}).catch(error => {
// error handing here...
})
return (
<div>
{loading && <p> Loading </p>} //HOW DO I USE SETTIMEOUT ON THIS <P> ELEMENT ?
{jobs && jobs.map(j=>return <p> {j.title} </p>)}
</div>
);
}
我正在使用 React 来获取数据并将其显示在我的应用程序中。如果我正在加载,我会显示消息:“正在加载...”。
我想要的是使用 setTimeout()
将加载消息显示的时间比应有的多几秒钟。但是我不知道如何在反应中写这个。
我的代码:
export default function JobList() {
const {loading ,error , jobs} = useFetch();
return (
<div>
{loading && <p> Loading </p>} //HOW DO I USE SETTIMEOUT ON THIS <P> ELEMENT ?
{jobs && jobs.map(j=>return <p> {j.title} </p>)}
</div>
);
}
export default function JobList() {
const [isLoading, setIsLoading] = useState(false)
const {loading ,error , jobs} = useFetch();
useEffect(() => {
if (loading) {
setIsLoading(true)
}
if (!loading) {
setTimeout(() => {
setIsLoading(false)
}, 2000)
}
}, [loading])
return (
<div>
{isLoading && <p> Loading </p>}
{!isLoading && jobs?.map(j=>return <p> {j.title} </p>)}
</div>
);
}
使用 useState 挂钩创建一个名为 isLoading 的状态。使用它有条件地渲染 Loading component/spinner.
setIsLoading
每次 loading
更改时都会在 useEffect
中调用。因此,如果您在 useEffect 中添加 setTimeout
,它将在 2000 毫秒后从 true 变为 false。
这假设从 useFetch 加载是一个布尔值。
此外,如果您使用的是 ES2020,则可以在 jobs.map 渲染中使用可选链接。您可以避免编写额外的支票。
这是一个解决方案,您应该尝试类似的方法。
export default function JobList() {
const [loading, setLoading] = useState(true);
const request = useFetch('https://example.com')
request.post('/todos', {
any: 'data'
}).then(response => {
settimeout(() => {
setLoading(false)
}, 1000 ) // here you can set delay
}).catch(error => {
// error handing here...
})
return (
<div>
{loading && <p> Loading </p>} //HOW DO I USE SETTIMEOUT ON THIS <P> ELEMENT ?
{jobs && jobs.map(j=>return <p> {j.title} </p>)}
</div>
);
}