Reactjs 如何使用setTimeout运行map函数?
我需要运行带有setTimeout的map函数,以在渲染函数之后延迟2000ms 我使用了setTimeout(#########,2000),但它不起作用。 延迟渲染函数中某些内容的最佳方法是什么? 在reactJs中渲染时如何使用setTimeoutReactjs 如何使用setTimeout运行map函数?,reactjs,settimeout,map-function,Reactjs,Settimeout,Map Function,我需要运行带有setTimeout的map函数,以在渲染函数之后延迟2000ms 我使用了setTimeout(#########,2000),但它不起作用。 延迟渲染函数中某些内容的最佳方法是什么? 在reactJs中渲染时如何使用setTimeout import React,{Component} from "react"; import TypeMessage from './typeMessage'; import {connect} from "react-redux"; cla
import React,{Component} from "react";
import TypeMessage from './typeMessage';
import {connect} from "react-redux";
class MainContent extends Component{
constructor(props){
super(props);
this.state={
count:0,
questions:[]
}
}
addMessage=(message)=>{
console.log( "inputtan gelen message",message);
message.keyId = Math.random();
this.props.dispatch({type:"SAVE_MESSAGE",typeMessage:message});
}
moreCount=()=>{
console.log("more count tıklandı");
this.setState(prevState=>({
count:prevState.count+1
}));
}
_nextQuestion=()=>{
this.setState(prevState=>({
count:prevState.count+1
}));
Object.entries(this.props.saveFormQuestions).map(([key, value], i) => {
//if(key===this.state.count.toString() && value.type==='control_fullname'){
return (
this.setState(prevState=>({
questions:prevState.questions.concat(value)
}))
);
})
}
render(){
let sendSomething="Main contentten type message'e mesaj gönderildi";
return(
<div className="mainContainer">
<h3 className="text-center">Jotform ChatBot</h3>
<div className="messaging">
<div className="inbox_msg">
<div className="mesgs">
{
//////////MESSAGE FIELD////////////////*\
}
<div className="msg_history">
<div className="outgoing_msg">
<div className="outgoing_msg_img"> <img src="jot_pencil.png"
alt="pencil"/>
</div>
<div className="sent_msg">
<p>
How Can I help you? Would you like to fullfill the form?
<input type="button"value="Yes" onClick={this._nextQuestion}/>
<input type="button"value="No"/>
</p>
<span className="time_date"> 11:01 AM | June 9</span>
</div>
</div>
{
/* I need to delay this area */
setTimeout(
this.state.questions.map(item=>{
if(item.type==='control_fullname' && item.order===this.state.count.toString()){
return(
<div className="incoming_msg" key={item.qid}>
<div className="incoming_msg_img"> <img src="https://ptetutorials.com/images/user-profile.png"
alt="sunil"/>
</div>
<div className="received_msg">
<div className="received_withd_msg">
<p>{item.type}</p>
<p>
</p>
<span className="time_date"> 11:01 AM | June 9</span>
</div>
</div>
</div>
)}else{
return(<div style={{display:'none'}}>We dont find any questions in your form</div>);
}
}),2000)
}
{
//User sent messages
this.props.saveMessage.map(message=>{
return (
<div className="incoming_msg" key={message.keyId}>
<div className="incoming_msg_img"> <img src="https://ptetutorials.com/images/user-profile.png"
alt="sunil" />
</div>
<div className="received_msg">
<div className="received_withd_msg">
<p>Your answer.</p>
<p>
{message.content}
</p>
<span className="time_date"> 11:04 AM | June 9</span>
</div>
</div>
</div>);
})
}
</div>
<TypeMessage message={sendSomething} addMessage={this.addMessage} moreCount={this.moreCount}/>
{
//////////MESSAGE FIELD////////////////*\
}
</div>
</div>
</div>
</div>
);
}
}
const mapStateToProps=state=>({
formId:state.formId,
apiKey:state.apiKey,
saveMessage:state.saveMessage,
saveFormQuestions:state.saveFormQuestions
})
export default connect(mapStateToProps)(MainContent);
#
重画
我需要运行带有setTimeout的map函数,以在渲染函数之后延迟2000ms
我使用了setTimeout(#########,2000),但它不起作用。
延迟渲染函数中某些内容的最佳方法是什么?
在reactJs中渲染时如何使用setTimeout
import React,{Component} from "react";
import TypeMessage from './typeMessage';
import {connect} from "react-redux";
class MainContent extends Component{
constructor(props){
super(props);
this.state={
count:0,
questions:[]
}
}
addMessage=(message)=>{
console.log( "inputtan gelen message",message);
message.keyId = Math.random();
this.props.dispatch({type:"SAVE_MESSAGE",typeMessage:message});
}
moreCount=()=>{
console.log("more count tıklandı");
this.setState(prevState=>({
count:prevState.count+1
}));
}
_nextQuestion=()=>{
this.setState(prevState=>({
count:prevState.count+1
}));
Object.entries(this.props.saveFormQuestions).map(([key, value], i) => {
//if(key===this.state.count.toString() && value.type==='control_fullname'){
return (
this.setState(prevState=>({
questions:prevState.questions.concat(value)
}))
);
})
}
render(){
let sendSomething="Main contentten type message'e mesaj gönderildi";
return(
<div className="mainContainer">
<h3 className="text-center">Jotform ChatBot</h3>
<div className="messaging">
<div className="inbox_msg">
<div className="mesgs">
{
//////////MESSAGE FIELD////////////////*\
}
<div className="msg_history">
<div className="outgoing_msg">
<div className="outgoing_msg_img"> <img src="jot_pencil.png"
alt="pencil"/>
</div>
<div className="sent_msg">
<p>
How Can I help you? Would you like to fullfill the form?
<input type="button"value="Yes" onClick={this._nextQuestion}/>
<input type="button"value="No"/>
</p>
<span className="time_date"> 11:01 AM | June 9</span>
</div>
</div>
{
/* I need to delay this area */
setTimeout(
this.state.questions.map(item=>{
if(item.type==='control_fullname' && item.order===this.state.count.toString()){
return(
<div className="incoming_msg" key={item.qid}>
<div className="incoming_msg_img"> <img src="https://ptetutorials.com/images/user-profile.png"
alt="sunil"/>
</div>
<div className="received_msg">
<div className="received_withd_msg">
<p>{item.type}</p>
<p>
</p>
<span className="time_date"> 11:01 AM | June 9</span>
</div>
</div>
</div>
)}else{
return(<div style={{display:'none'}}>We dont find any questions in your form</div>);
}
}),2000)
}
{
//User sent messages
this.props.saveMessage.map(message=>{
return (
<div className="incoming_msg" key={message.keyId}>
<div className="incoming_msg_img"> <img src="https://ptetutorials.com/images/user-profile.png"
alt="sunil" />
</div>
<div className="received_msg">
<div className="received_withd_msg">
<p>Your answer.</p>
<p>
{message.content}
</p>
<span className="time_date"> 11:04 AM | June 9</span>
</div>
</div>
</div>);
})
}
</div>
<TypeMessage message={sendSomething} addMessage={this.addMessage} moreCount={this.moreCount}/>
{
//////////MESSAGE FIELD////////////////*\
}
</div>
</div>
</div>
</div>
);
}
}
const mapStateToProps=state=>({
formId:state.formId,
apiKey:state.apiKey,
saveMessage:state.saveMessage,
saveFormQuestions:state.saveFormQuestions
})
export default connect(mapStateToProps)(MainContent);
import React,{Component}来自“React”;
从“./TypeMessage”导入TypeMessage;
从“react redux”导入{connect};
类MainContent扩展组件{
建造师(道具){
超级(道具);
这个州={
计数:0,
问题:[]
}
}
addMessage=(消息)=>{
console.log(“输入格伦消息”,消息);
message.keyId=Math.random();
this.props.dispatch({type:“SAVE_MESSAGE”,typeMessage:MESSAGE});
}
moreCount=()=>{
console.log(“更多计数tıklandı”);
this.setState(prevState=>({
计数:prevState。计数+1
}));
}
_下一个问题=()=>{
this.setState(prevState=>({
计数:prevState。计数+1
}));
Object.entries(this.props.saveFormQuestions).map([key,value],i)=>{
//if(key==this.state.count.toString()&&value.type===control\u fullname){
返回(
this.setState(prevState=>({
问题:prevState.questions.concat(值)
}))
);
})
}
render(){
让sendSomething=“Main contentten type message'e mesaj gönderildi”;
返回(
Jotform聊天机器人
{
//////////消息字段////////////////*\
}
我能为您效劳吗?您要填这张表吗?
6月9日上午11:01
{
/*我需要推迟这个地区*/
设置超时(
this.state.questions.map(项=>{
if(item.type=='control\u fullname'&&item.order==this.state.count.toString()){
返回(
{item.type}
6月9日上午11:01
)}否则{
返回(我们在您的表格中未发现任何问题);
}
}),2000)
}
{
//用户发送的消息
this.props.saveMessage.map(message=>{
返回(
你的回答
{message.content}
6月9日上午11:04
);
})
}
{
//////////消息字段////////////////*\
}
);
}
}
常量mapStateToProps=状态=>({
formId:state.formId,
apiKey:state.apiKey,
saveMessage:state.saveMessage,
saveFormQuestions:state.saveFormQuestions
})
导出默认连接(MapStateTops)(主内容);
通常不建议尝试这样做;最好在该时间之后更新状态,并根据状态进行渲染更新。我也同意@OliverRadini。但是,此map
函数位于组件中的何处?将映射放入承诺中,并在解析时设置超时?它通常不是advisa我们可以尝试这样做;最好在这段时间之后更新状态,并根据状态更新渲染。我也同意@OliverRadini。但是,这个map
函数在组件中的位置在哪里?将映射放在一个承诺中,在解决时设置超时?