Javascript 通量/Alt设置超时不更新存储

Javascript 通量/Alt设置超时不更新存储,javascript,reactjs,toast,reactjs-flux,Javascript,Reactjs,Toast,Reactjs Flux,我正在尝试使用React应用程序创建一个基本的“Toast”服务 我已经完成了大部分逻辑工作,我可以在触发add(options)操作时向视图中显示的数组中添加新项,但是我也尝试允许发送超时,并在启动后删除toast项: onAdd(options) { this.toasts.push(options); const key = this.toasts.length - 1; if (options.timeout) { options.timeou

我正在尝试使用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会出现在我的页面上,超时也会被触发(比如几秒钟后),但是操纵
this.toast
setTimeout
中似乎没有任何效果


显然,这缺少了核心功能,但除了setTimeout部分之外,其他功能都可以正常工作。

超时似乎是在内部设置状态,而不是广播更改事件。它可能与调用forceUpdate()一样简单。但是我使用的模式是调用setState(),我认为在这种情况下您可能需要这样做

下面是更新状态和广播更改事件的示例

从“../alt”导入alt
从“React/addons”导入React
从“../actions/toastations”导入toastations
类ToastStore{
构造函数(){
this.toasts=[];
this.bindAction(toastations.ADD,this.ADD);
this.bindAction(toastations.REMOVE,this.REMOVE);
}
添加(选项){
这个。烤面包。推(选项);
this.setState({toasts:this.toasts});
if(options.timeout){
//将此选项的删除排入队列
toastations.remove.defer(选项);
}
}
删除(选项){
常量移除选项=()=>{
const toasts=this.toasts.filter(t=>t!==options);
this.setState({toasts:toasts});
};
if(options.timeout){
setTimeout(removeOptions,options.timeout);
}否则{
移除选项();
}
}
}

module.exports=alt.createStore(ToastStore,“ToastStore”)超时似乎是在内部设置状态,而不是广播更改事件。它可能与调用forceUpdate()一样简单。但是我使用的模式是调用setState(),我认为在这种情况下您可能需要这样做

下面是更新状态和广播更改事件的示例

从“../alt”导入alt
从“React/addons”导入React
从“../actions/toastations”导入toastations
类ToastStore{
构造函数(){
this.toasts=[];
this.bindAction(toastations.ADD,this.ADD);
this.bindAction(toastations.REMOVE,this.REMOVE);
}
添加(选项){
这个。烤面包。推(选项);
this.setState({toasts:this.toasts});
if(options.timeout){
//将此选项的删除排入队列
toastations.remove.defer(选项);
}
}
删除(选项){
常量移除选项=()=>{
const toasts=this.toasts.filter(t=>t!==options);
this.setState({toasts:toasts});
};
if(options.timeout){
setTimeout(removeOptions,options.timeout);
}否则{
移除选项();
}
}
}

module.exports=alt.createStore(ToastStore,“ToastStore”)onAdd(选项)是存储上的事件处理程序吗?onAdd(选项)是存储上的事件处理程序吗?是的,谢谢!我不知道你也可以在店内使用setState。是的,这很有效,谢谢!我不知道你也可以在商店里这样使用setState。