当前位置: 首页 > 面试题库 >

React + Redux,如何在每次派发后而不是每次派发后呈现?

蒋培
2023-03-14
问题内容

我正在尝试对html" target="_blank">存储进行多次更改,但是直到所有更改完成后才进行渲染。我想用redux-thunk做到这一点。

这是我的动作创建者:

function addProp(name, value) {
    return { type:'ADD_PROP', name, value }
}

function multiGeoChanges(...changes) {
    // my goal here is to make multiple changes to geo, and make sure that react doesnt update the render till the end
    return async function(dispatch, getState) {
        for (let change of changes) {
            dispatch(change);
            await promiseTimeout(2000);
        }
    }
}

我像这样派遣我的异步动作创建者:

store.dispatch(multiGeoChanges(addProp(1, "val1"), addProp(2, "val2"), addProp(3, "val3")));

但是,这导致每次反应后都进行渲染dispatch。我是redux-thunk的新手,我从未使用过异步中间件,但我认为它可以在这里为我提供帮助。


问题答案:

有一些方法可以实现目标:

经典方式:

通常:动作描述 发生某事 事实 ,但没有指定应用程序的状态如何响应而改变。这是减速器的工作。这也意味着
行动不是二传手

因此,您可以描述发生了什么并累积更改,并调度 一项 操作 ,例如:

const multipleAddProp = (changedProps) =>({
   type:'MULTIPLE_ADD_PROP', changedProps
});

然后对减速器中的动作做出反应:

const geo=(state,action)=>{
   ...
   switch (action.type){
   case 'MULTIPLE_ADD_PROP':
     // apply new props
   ...
   }
}

另一种方法 是重新渲染很关键时:

那么您可以考虑限制组件,这些组件可以在状态更改时重新呈现。例如,您可以shouldComponentUpdate用来检查是否应渲染组件。您也可以使用
reselect ,以便在计算派生数据后不 重新 呈现连接的组件…

非标准方式: redux-batched-action

它的工作原理类似于交易。

在此示例中,将一次通知订户:

import { batchActions } from 'redux-batched-actions';

const multiGeoChanges=(...arrayOfActions)=> dispatch => {
    dispatch( batchActions(arrayOfActions) );
}


 类似资料:
  • CSS: 这个“滚动”动画只在初始渲染时播放一次。每次由于更改而重新呈现时,我都希望播放它。不使用库怎么做?

  • 问题内容: 我有一个javascript函数,我希望在JSF 2中进行每次异步回发后执行。 我已执行以下操作以确保执行此每整页回发: 我需要执行此操作的原因是为了解决第三方JSF组件库中的故障,因此我无法在服务器呈现阶段中进行任何修改来对此组件执行此操作。 我可能找不到有关此问题的信息,可能是因为我使用了不正确的术语。我曾经是ASP.NET开发人员,我将这些术语称为“整页回发”和“部分回发”,而其

  • 如何在移动结束时触发,而不是每个变量?口水?这不是黑客吗? 如果不使用VariableListener,它将不再是PlanningEntity。难道这不是一个与文档相反的问题吗?缺点是什么? “计算”是对规划期间内流量网络值的预测,其中流量级别取决于任务的当前位置。 我们使用的是实时计划,因此计划期间窗口会根据任务集大小进行调整,并随时间推移。

  • 我在一个表单上有一个TextField输入,问题是当我在它上键入时,刚刚键入的值的显示/呈现有一种延迟,我想防止这种延迟。 代码:

  • 我正在做一个项目,我们使用flyway来升级我们的DB模式。 我正在通过插件使用。 多谢

  • 问题内容: 我有一个php脚本,只生成到客户端的日志。 当我回声时,我希望将其即时传输到客户端。 (因为在处理脚本时,页面为空白) 我已经使用和玩过了,但是它们没有用。 最好的解决方案是什么? PS:在通话结束时冲水有点脏… 编辑:答案都行不通,PHP还是Apache错误? 问题答案: 编辑: 我在阅读手册页上的评论时遇到一个错误,该错误指出 不能正常工作 ,以下是解决方法: 如果这不起作用,那么