Flux/Alt-setTimeout未更新存储
Flux/Alt setTimeout not updating store
我正试图使用Alt.在我的React应用程序中创建一个类似"Toast"的基本服务
我已经完成了大部分逻辑,我可以在触发add(options)
操作时将新项目添加到阵列中,这些项目会出现在我的视图中,但我也试图允许发送超时,并在toast项目启动后删除它:
onAdd(options) {
this.toasts.push(options);
const key = this.toasts.length - 1;
if (options.timeout) {
options.timeout = window.setTimeout(() => {
this.toasts.splice(key, 1);
}, options.timeout);
}
}
此外,toast会出现在我的页面上,超时也会被触发(比如几秒钟后),但在setTimeout
内部操纵this.toasts
似乎没有任何效果。
显然,这缺少了核心功能,但除了setTimeout部分之外,一切都正常工作。
超时似乎是在内部设置状态,而不是广播更改事件。它可能和调用forceUpdate()一样简单。但我使用的模式是调用setState(),我认为在这种情况下您可能想要这样做。
以下是更新状态和广播更改事件的示例。
import alt from '../alt'
import React from 'react/addons'
import ToastActions from '../actions/ToastActions'
class ToastStore {
constructor() {
this.toasts = [];
this.bindAction(ToastActions.ADD, this.add);
this.bindAction(ToastActions.REMOVE, this.remove);
}
add(options) {
this.toasts.push(options);
this.setState({toasts: this.toasts});
if (options.timeout) {
// queue the removal of this options
ToastActions.remove.defer(options);
}
}
remove(options) {
const removeOptions = () => {
const toasts = this.toasts.filter(t => t !== options);
this.setState({toasts: toasts});
};
if (options.timeout) {
setTimeout(removeOptions, options.timeout);
} else {
removeOptions();
}
}
}
module.exports = alt.createStore(ToastStore, 'ToastStore');
相关文章:
- JavaScript-保存、存储和更新数组
- ExtJS网格在存储更新后未刷新
- 组件道具更改后更新redux存储
- 使用 JavaScript 存储、更改和更新不透明度
- ExtJS——更改代理URL然后加载存储不会更新网格
- 存储未更新到列表的数据
- 更新sencha touch 2中的存储记录值
- 更新存储在Google Drive上的文件的内容
- 如何在单击按钮时动态更新本地存储中的值
- extjs 存储更新未触发
- 在定期更新的 Angular 中存储和使用数据的最佳方式
- 为什么使用重复的嵌套键更新 Redux 存储
- 当存储状态更改时,React 组件不会更新
- 余烬简单身份验证 - 如何更新存储的令牌
- 如何用编程更改的Ember.TextBox数据更新存储
- Flux/Alt-setTimeout未更新存储
- 更改/更新存储值
- React/Flux——监控api和更新存储新数据的最佳方式
- 使用HTML标签和innerHTML、setAttribute()等传递数据.编辑和更新存储在数据库中的新闻文章
- 如何在DOM更改后更新存储在变量中的jQuery对象