gpt4 book ai didi

javascript - Dispatch 和 setState 不能一起工作,而是独立工作

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:27 25 4
gpt4 key购买 nike

我有一个 DatePicker 组件,当我单击新日期时,它应该在 redux 存储中设置更改日期,并且在用户体验方面也很明显。

由于某种原因,我将把我的代码放在下面的 handleChange 函数中,同时使用 setStatethis.props.addFitler 在那里触发,redux 存储正确更新,但 UX 没有。但是,如果我注释掉 this.props.addFilter 调度函数,用户体验就会正确更新(显然商店不会)。

为什么这两者不能一起工作?我尝试过更改它们的调用顺序,将每个函数提取到另一个函数中,使用 mapDispatchToProps 而不是直接调用操作创建者,但都无济于事。

DatePicker.js:

import DatePicker from 'react-datepicker';

class DatePick extends React.Component {
constructor(props) {
super(props);
this.state = {
date: moment()
};
this.handleChange = this.handleChange.bind(this);
}
handleChange(date) {
const { dashboardName } = this.props;
const { name } = this.props.column;
this.props.addFilter(date, dashboardName, name);
this.setState({date});
}
render() {
return (
<div style={{display: 'inline-block', fontWeight: 'bold'}}>
<DatePicker
dateFormat="DD/MM/YYYY"
selected={this.state.date}
onChange={this.handleChange} />
</div>
);
}
}

const mapActionToProps = {
addFilter
};

export default connect(null, mapActionToProps)(DatePick);

handleChange 函数中传递的“date”参数是一个 moment 对象,就像用于设置initialState 的对象一样,因此这不是问题。

其他信息:如果我在 setState() 之前和之后进行控制台日志,它会两次记录初始状态。

有人遇到过这个问题或者有什么想法吗?如果您需要查看我的 redux,我可以使用更多代码更新帖子,但我认为这不是问题,因为它可以很好地更新商店。

最佳答案

我找到了解决方案, Action 创建者调用正在执行一些同步操作,并且整个 UI 线程被锁定,直到它完成正在执行的操作。因此,我们可以借助 setTimeout 稍微延迟调用,一切都会按预期进行

关于javascript - Dispatch 和 setState 不能一起工作,而是独立工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43068297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com