Javascript 试图设置倒计时计时器,但从componentdidmount传递数据时未定义
这是我的代码行。我无法从Javascript 试图设置倒计时计时器,但从componentdidmount传递数据时未定义,javascript,reactjs,momentjs,Javascript,Reactjs,Momentjs,这是我的代码行。我无法从const{quests}=this.props访问数据我正在从redux州提取它,并且我正在得到未定义的代码。我试图将我的代码放在组件上。我的问题在未定义时得到了解决。然而,我不能让时间滴答作响,我的页面也不能重新呈现 componentDidUpdate() { const { quests } = this.props || {} let getTime; getTime = quests.item
const{quests}=this.props访问数据代码>我正在从redux州提取它,并且我正在得到未定义的代码。我试图将我的代码放在组件上。我的问题在未定义时得到了解决。然而,我不能让时间滴答作响,我的页面也不能重新呈现
componentDidUpdate() {
const { quests } = this.props || {}
let getTime;
getTime = quests.items?.items?.map(quests => {
let startTime = Date.parse(quests.createdAt)
let endTime = Date.parse(quests.expiresAt)
let timeLimit = endTime - startTime;
let timeDuration = moment.duration(timeLimit*1000, 'milliseconds');
let interval = 1000;
let today = moment().utc();
quests.timeDuration = timeDuration
setInterval(() => {
timeDuration = moment.duration(timeDuration - interval, 'milliseconds')
quests.timeDuration = timeDuration
}, interval)
})
return getTime;
}
你的计时器功能正在改变道具(这是不好的),因为它直接改变任务,但它不会导致状态或道具的可识别更新,因此不会重新排序。类似的东西可能会起作用,如果项目中没有更多的代码,很难提供一个有用的示例,但这可能会给你一个想法
state = {
quests: [],
elapsedSeconds: 0,
}
componentDidUpdate(prevProps) {
if (!prevProps.quests && this.props.quests) {
const { quests } = this.props;
let getTime = [];
quests.items?.items?.forEach((quest, index) => {
let startTime = Date.parse(quest.createdAt)
let endTime = Date.parse(quest.expiresAt)
let timeLimit = endTime - startTime;
let timeDuration = moment.duration(timeLimit*1000, 'milliseconds');
let today = moment().utc();
getTime.push(timeDuration);
})
this.setState({quests: getTime});
this.timer = setInterval(() => {
this.setState(({elapsedSeconds, quests}) => {
quests = quests.map(time => time - 1000)
return {elapsedSeconds: elapsedSeconds++, quests};
});
}, 1000);
}
}
componentWillUnmount() {
clearInterval(this.timer);
}
你的计时器功能正在改变道具(这是不好的),因为它直接改变任务,但它不会导致状态或道具的可识别更新,因此不会重新排序。类似的东西可能会起作用,如果项目中没有更多的代码,很难提供一个有用的示例,但这可能会给你一个想法
state = {
quests: [],
elapsedSeconds: 0,
}
componentDidUpdate(prevProps) {
if (!prevProps.quests && this.props.quests) {
const { quests } = this.props;
let getTime = [];
quests.items?.items?.forEach((quest, index) => {
let startTime = Date.parse(quest.createdAt)
let endTime = Date.parse(quest.expiresAt)
let timeLimit = endTime - startTime;
let timeDuration = moment.duration(timeLimit*1000, 'milliseconds');
let today = moment().utc();
getTime.push(timeDuration);
})
this.setState({quests: getTime});
this.timer = setInterval(() => {
this.setState(({elapsedSeconds, quests}) => {
quests = quests.map(time => time - 1000)
return {elapsedSeconds: elapsedSeconds++, quests};
});
}, 1000);
}
}
componentWillUnmount() {
clearInterval(this.timer);
}
可能您的MapStateTops
功能未正确连接到connect
。请用Redux绑定发布整个组件。很抱歉,我的意思是我在render上调用它时已经得到了数据,但是当我把它放在componentdidmount中时,我得到了未定义的数据。对不起,我说的是英语。可能您的mapstatetops
功能没有正确连接到connect
。请用Redux绑定发布整个组件。很抱歉,我的意思是我在render上调用它时已经得到了数据,但是当我把它放在componentdidmount中时,我得到了未定义的数据。对不起我的英语。