首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >React Redux -在派单问题之前快速刷新之前的状态

React Redux -在派单问题之前快速刷新之前的状态
EN

Stack Overflow用户
提问于 2020-08-15 13:09:00
回答 2查看 242关注 0票数 3

我正在构建一个带有Node.js后端的React + Redux应用程序,其中一个功能是用户可以查看其他用户的个人资料。为此,我在Redux state中有一个名为users的部分,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    ...,
    users: {
        user: {},
        isLoading: true
    }
}

每次呈现/users/:id路由时,都会调度一个getUser(id)操作,并用接收到的信息填充状态。

主要问题是,当用户查看用户1的配置文件页面(因此redux状态现在填充了用户1的配置文件),然后查看用户2的配置文件页面时,在页面呈现后立即调用dispatch getUser(2)操作。由于user1的信息仍然处于该状态,它将在很短的时间内刷新他们的信息,然后显示加载微调器,直到新用户被加载。

我读到过有关在每次卸载页面时分派resetUser(id)操作的内容,但我不确定这是否是正确的方法。此外,其中一个功能是,如果用户正在查看自己的页面,他们会有一个编辑按钮,可以将他们重定向到/edit-profile。如果我在每次卸载时重置状态,我将不得不再次获取他们的个人资料(在编辑页面中),即使我只是在他们查看他们的页面时这样做。这看起来是不合理的。

有什么办法解决这个问题吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-08-15 13:25:18

mounting之后运行render阶段。你说以前的数据在新数据之前显示。看起来你有异步挂载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async componentDidMount() {}

它将继续渲染,甚至在安装阶段完成之前。为了避免出现问题,您可以使用同步挂载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
componentDidMount(){}

您将在其中调用api数据。

现在,当你到达渲染阶段时,它将在渲染之前有新的数据可用,而不会闪烁你的旧数据。

您现在可能想知道如何异步调用api。您可以创建一个异步函数,并在同步componentDidMount中调用该函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
componentDidMount() {
  yourAsyncFunc()
}
async yourAsyncFunc() {} // api call

我如何使用React钩子来做这件事?

使用useEffect时,不要实现异步:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
useEffect(async () => 

简单地实现它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
useEffect(() => {
  // you can still use asynchronous function here
  async function callApi() {}
  callApi()
}, []) // [] to run in similar to componentDidMount

如果你错过了useEffect的第二个参数,那么你就不能确保它在挂载阶段运行。它将在渲染之前、之后和渲染阶段运行,具体取决于大小写。

票数 1
EN

Stack Overflow用户

发布于 2020-10-27 11:05:40

在这里实现像resetUser(id)这样的东西似乎是正确的方式。我在我当前的项目中使用了这种方法,这确实解决了问题。在另一个答案中提到的从useEffect回调中删除async关键字的另一种方法对我不起作用(我使用钩子、redux-toolkit、Typescript)。

发送此操作后,您的状态应如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  ...,
  users: {
    user: null,
    isLoading: false,
  }
}

如果您使用的是钩子,则可以通过以下方式分派操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
useEffect(() => {
  const ac = new AbortController();
  ...
  return () => {
    dispatch(resetUser(null));
    ac.abort();
  };
}, []);

操作可能如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
resetListingDetails(state, action) {
  // Immer-like mutable update
  state.users = {
    ...state.users,
    user: null,
  };
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63426393

复制
相关文章
使用 Redux 之前要在 React 里学的 8 件事
状态管理是一件很有难度的事。一些第三方视图库,比如 React,能够帮助你管理本地组件的状态,但它只能在有限的范围里帮到你,React 仅仅是一个视图层的库。最终你会决定去使用一个更加复杂的状态管理解决方案,比如 Redux,但还有一些我想要在此文中提醒的事项,在你踏上 Redux 的列车以前,这些关于 React 的事项是你应该了解的。
疯狂的技术宅
2019/03/28
1.1K0
刷新/关闭页面之前发送请求
本文中提到的链接,因为微信的限制,没有显示出来,查看文中链接,需要点击最下方的阅读原文链接
OBKoro1
2020/10/27
3.6K0
刷新/关闭页面之前发送请求
使用Redux和React-redux在React中进行状态管理
首先,我们需要使用create-react-app命令行工具安装新的react应用。
前端修罗场
2022/07/29
2.9K0
使用Redux和React-redux在React中进行状态管理
activity结束之后刷新之前的activity的内容
点击添加按钮之后-----弹出一个新的activity--------在新的activity将数据输入保存之后,关闭当前的activity回到之前的activity刷新内容 实现:使用onActivityResult 启动页: btnButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i
欢醉
2018/01/22
9030
Confluence 6 在升级之前
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新。
HoneyMoose
2019/04/20
6260
Confluence 6 在升级之前
[译] 在你学习 React 之前必备的 JavaScript 基础
为了不浪费大家的宝贵时间,在开头申明一下,这篇文章针对的阅读对象是:没有写过 React 或者刚刚才接触 React 并且对于 ES6 的语法不太了解的同学,这是一篇基础入门的文章,在一开始我并没有准备翻译一篇这样的基础文章,但是在阅读完全文之后,我想起自己刚开始学习 React 时的迷茫, ES6 有那么多,我需要掌握多少呢?对于一个急于上手 React 写代码的人来说,这篇文章告诉你最基本要掌握的知识,让你快速的写起来。但是后期的提高,仍旧需要去夯实 Javascript 的基础。
coder_koala
2020/03/24
1.7K0
[译] 在你学习 React 之前必备的 JavaScript 基础
组件分享之前端组件——用于表单状态管理和验证的 React Hooks (Web + React Native)
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
cn華少
2022/05/20
4.7K0
React和Redux——状态管理Flux和Redux
在强调组件化的React中,我们需要以高内聚、低耦合的原则设计高可复用性的组件。因此渲染组件的数据由两部分组成,一个是由父组件传入的Props参数、一个是组件的内部状态State。Props参数可以是任何的Javascript对象,作为组件本身可以通过使用propTypes限制必须输入的参数和输入参数的类型以保证组件的可用性。State负责维护组件内部的状态,组件内部必要时可以通过触发父组件传递的回调函数传递信息给父组件或者将State以Props的形式传递给子组件。
lyndonxdlin
2018/07/05
1.9K0
Web Beacon 刷新/关闭页面之前发送请求
本文中提到的链接,因为微信的限制,没有显示出来,查看文中链接,需要点击最下方的阅读原文链接
OBKoro1
2020/10/27
1.7K0
Web Beacon 刷新/关闭页面之前发送请求
Confluence 6 在升级之前 原
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新。
HoneyMoose
2019/04/29
5190
Confluence 6 在升级之前
                                                                            原
Consul初探-在深交之前先认识
首先,官方介绍是:Consul 是一种服务网格的解决方案,在 Consul 中,提供了服务发现、配置、分段等控制管理平台,Consul 中的每项功能都可以单独使用,也可以一起使用来构建完整的服务网格;在 Consul 内部,有一个简单的代理服务,所以在安装 Consul 后,马上就可以开始使用 Consul ;当然,Consul 也支持集成第三方代理,比如 Envoy。
梁规晓
2019/07/09
5160
Consul初探-在深交之前先认识
VC 在调用main函数之前的操作
title: VC 在调用main函数之前的操作 tags: [VC++, 反汇编, C++实现原理] date: 2018-09-16 10:36:23 categories: VC++反汇编分析 keywords: VC++, 反汇编, C++实现原理, main函数调用, VC 运行环境初始化 --- 在C/C++语言中规定,程序是从main函数开始,也就是C/C++语言中以main函数作为程序的入口,但是操作系统是如何加载这个main函数的呢,程序真正的入口是否是main函数呢?本文主要围绕这个主题,通过逆向的方式来探讨这个问题。本文的所有环境都是在xp上的,IDE主要使用IDA 与 VC++ 6.0。为何不选更高版本的编译器,为何不在Windows 7或者更高版本的Windows上实验呢?我觉得主要是VC6更能体现程序的原始行为,想一些更高版本的VS 它可能会做一些优化与检查,从而造成反汇编生成的代码过于复杂不利于学习,当逆向的功力更深之后肯定得去分析新版本VS 生成的代码,至于现在,我的水平不够只能看看VC6 生成的代码 首先通过VC 6编写这么一个简单的程序
Masimaro
2018/10/10
2.1K0
VC 在调用main函数之前的操作
java——推断日期是否在今天之前
这里说的日期是指字符串的日期格式,如“2014-10-15”,我们要推断这个日期是否在今天之前,网上看到好多推断的方法,都是拿这个日期转换成Date对象 然后与new Date()比較,使用comparetTo() 或者before()方法,事实上这样做都会有点小问题,这样做忽略了一个小时分钟的比較,会出现错误,得不到正确的结果。
全栈程序员站长
2022/07/08
2.1K0
sqlmap 源码分析(三)在注入之前
sqlmap是web狗永远也绕不过去的神器,为了能自由的使用sqlmap,阅读源码还是有必要的…
LoRexxar
2023/02/21
1.6K0
MCU在执行main之前做了什么?
本文以Arm Cortex-M为例,介绍了在IAR Embedded Workbench中微控制器(MCU)的启动过程。在MCU复位后,程序计数器(PC)会指向相应的复位向量,并开始执行启动代码(startup code)。如果MCU支持浮点单元(FPU),则在启动过程中,首先会调用__iar_init_vfp来初始化FPU,然后继续执行__iar_program_start。接着,__iar_program_start会调用__cmain函数。在__cmain中,会先调用__low_level_init函数,然后调用__iar_data_init3来进行全局和静态变量的初始化。在__iar_data_init3中,首先会调用__iar_zero_init3来初始化初始值为0的全局和静态变量,随后会调用__iar_copy_init3来初始化初始值为非0的全局和静态变量。最终,在启动过程的最后阶段,会通过调用__call_main来跳转到main函数,从而开始执行主程序。
刘盼
2023/08/22
9420
MCU在执行main之前做了什么?
「演进架构」架构在实施之前是抽象的
这是一个思想实验。拿一台计算机,在其上安装主流操作系统,以及各种软件(数据库,应用程序服务器,Web服务器等)。一切正常后,拔下电脑并将其放入壁橱中一年。在这一年过去之后,从它的避风港取回它,将其插入电源和互联网,并启动它。什么是第一件事(或者说,第一套事情)会发生什么?47软件更新可用!新病毒定义!! Office需要关闭所有浏览器才能自行更新!即使壁橱内没有任何改变,整个宇宙仍然继续其无情的步伐。软件世界中没有任何东西是静态的。
架构师研究会
2019/08/30
5010
在斗鱼IPO之前,这几个问题真应该弄明白
被热心网友送上“GuabiTV”称谓的斗鱼要IPO了,斗鱼的自信,大概源于其2017年11月所宣布的“已进入完全盈利状态”,但不论如何,IPO不是靠嘴说就能完成的事,从监管、市场预期的角度,一个能够成功IPO企业身上必然应当具备一些基本的素质门槛。斗鱼IPO这次能一帆风顺吗?回答这个问题之前,我们有必要正面一下那些从数据和现实角度呈现出的“系统性”问题。
曾响铃
2018/08/21
4580
在斗鱼IPO之前,这几个问题真应该弄明白
[-NDK 导引篇 -] 在NDK开发之前你应知道的东西
前言 笔者看了一些NDK的项目。一些教程不是HelloWord就是直接整FFmpeg或OpenCV,可谓一个天一个地,而且目录结构和Android3.5的默认结构并不是太一致,一直没找到什么合心的文章。故写此文连接这天地,来总结一下在NDK开发之前你应知道的东西。 ---- 在此之前,先划分三类人,如果不认清自己是什么角色(垃圾)就去玩NDK,你会很糟心: user : 纯粹.so链接库使用者(伸手党) creator : 纯粹ndk开发者,创作.so链接库(创作家) designer : 在现
张风捷特烈
2020/04/30
6560
[-NDK 导引篇 -] 在NDK开发之前你应知道的东西
在main方法之前,到底执行了什么?
本人在做接口测试的时候,需要用一个公共类来把所有的执行的代码,然后这个公共类有hsot和hosttype等属性来区分各个测试环境,然后在去不同的地方取用例和请求接口。在给这些属性复制的时候,我是通过不同测试环境新建不同的配置文件,然后执行每个环境的时候让只加载需要测试的环境的配置文件来实现管理测试环境的。中间遇到了一些坑,主要就是对java代码执行循序,特别是在main方法之前的代码执行顺序了解不深入导致的,中间有多个继承关系也有点扰乱了思路。下面分享一下自己这个错误的复现步骤。
FunTester
2019/08/30
7300
【Ruby on Rails】Model中关于保存之前的原值和修改状态
今天在Rails的Model中遇到了一个问题—— 当我从Model类中获取了一个ActiveRecord对象,对其进行了一系列修改(尚未保存),我该如何确定究竟哪些修改了呢? (设Model为Option,相关的的参数为correct) 我本来采取的方法是——在数据表中新增一个ori_correct参数,每次对象保存之前都和correct做到同步,这样一来,是不是correct字段发生了修改也就得以判断了。 但是这样的缺点也显而易见——如果以后参数个数很多的话,岂不是得每一个都得来一个相应的ori_字段?这
HansBug
2018/04/11
1.7K0

相似问题

减速机派单React Redux

14

Redux派单与React最终表单

19

ASP.NET核心React-with-Redux模板派单问题

14

Redux表单问题(派单不工作?)

19

Redux派单操作

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文