我刚接触React.js,不确定如何在React.js中添加delay
。添加延迟的最佳方法是什么。
我正在尝试将以下代码添加到渲染中,但它没有起作用。
setTimeout(function() {
}, 1000);
我刚接触React.js,不确定如何在React.js中添加delay
。添加延迟的最佳方法是什么。
我正在尝试将以下代码添加到渲染中,但它没有起作用。
setTimeout(function() {
}, 1000);
纯 TypeScript 解决方案
您可以使用 async
创建延迟函数:
function timeout(delay: number) {
return new Promise( res => setTimeout(res, delay) );
}
然后调用该函数:
await timeout(1000); //for 1 sec delay
function timeout(delay: number) {
改为function timeout(delay) {
来删除: number
,那么它就成为了JavaScript解决方案而不是TypeScript解决方案。 - Icemanind不确定为什么你想这样做,但是可以像这样实现:
组件的构造函数:
constructor(props) {
super(props);
this.state = {
render: false //Set render state to false
}
}
在组件挂载时:
componentDidMount() {
setTimeout(function() { //Start the timer
this.setState({render: true}) //After 1 second, set render to true
}.bind(this), 1000)
}
渲染方法:
render() {
let renderContainer = false //By default don't render anything
if(this.state.render) { //If this.state.render == true, which is set to true by the timer.
renderContainer = <div>Look at me! I'm content!</div> //Add dom elements
}
return (
renderContainer //Render the dom elements, or, when this.state == false, nothing.
)
}
当定时器触发时,渲染被设置为true。由于渲染存储在 state
中,这也会触发组件的重新渲染。这个 if
语句简单地指示 renderContainer
在状态为 true 时才显示内容。你还可以通过在顶部声明默认值为 renderContainer=<div>正在加载组件...</div>
来显示指示组件正在加载的文本。
使用React hooks。它将等待5s
,然后渲染此组件。
import React from 'react'
const DeleayComponent = () => {
const [show, setShow] = React.useState(false)
React.useEffect(() => {
const timeout = setTimeout(() => {
setShow(true)
}, 5000)
return () => clearTimeout(timeout)
}, [show])
if (!show) return null
return <>OK, Render</>
}
export default DeleayComponent
在规定的时间后展示组件最简单的方法是使用条件渲染,代码如下:
constructor(props) {
super(props);
this.state = {
render: false
}
}
handleRender = () => {
setTimeout(() => {
this.setState({ render : !this.state.render })
}, 1000);
}
render () {
return (
<div>
<button onClick={handleRender}>Set render to true</button>
{ this.state.render ? <Component /> : null }
</div>
)
}
当您点击按钮后,一秒钟后它将设置渲染状态为true,并且 <Component />
将会显示。
如果您想在组件加载时而不是单击按钮时运行setTimeout,您可以在 componentDidMount
生命周期中这样做:
componentDidMount(){
setTimeout(() => {
this.setState({ render : !this.state.render })
}, 1000);
}
希望您充分了解如何实现组件的渲染方式。
import { useState, useEffect } from "react";
const BotResponse = () => {
......
const [botMessage, setBotMessage] = useState('');
// function called from some user interaction
const botResponse = (msg) => {
setTimeout(function() {
setBotMessage(msg);
}, 500);
};
useEffect(() => {
console.log("bot msg... " + botMessage);
// display the bot message
}, [botMessage]); // listening to a change on this property
}