在项目中有个具体的表单页,表单选项有一些联动,类似于

实现的目标是,表单页组件各种选择,然后在进入下一步又可以返回修改,意味着返回修改的时候必须是要保存过一遍之前用户的选择

这个肯定是保存在store里的

处理方式有两个,一是页面中也保存一份在state中,页面内部的操作都通过setState来修改,在点击下一步的时候做一次保存到store的操作,在进入组件的时候做一次store初始化参数的操作。二是所有的操作修改都直接与store进行,不通过中间的state进行。

翻阅资料对于state和props哪种方法保存数据比较好,说state最好用来记录页面的状态,props记录数据,本来以为页面的表单是一种数据,因此先用了props来尝试

在使用直接与store交互的时候,纯数据的地方比如输入名字等,input的onchange中diapatch更新reducer即可,在遇到有联动的表单交互时遇到了困难,比如图中选择高级配置,此时要更新服务器配置这一项的值,然后根据服务器配置的新的值去更新下面资源的值,因为资源的更新还有别的表单项触发,所以抽取出来为单独的函数。

问题来了,步骤是先更新服务其配置的值,然后在独立函数中获取新的服务器配置的值,去更新资源的值,之前我以为reducer是同步的不会存在setstate异步的情况,但是实践的时候发现无法获取新的值,搜索了一下,大致原因是reducx的connect是在外面包了一层组件,把这个组件的state映射到子组件的props,这内部的state更新还是setState因此没法同步更新

参考

Dispatch 一个简单 action 是否是异步?​react-china.org

redux中有store.getState()函数来直接获取更新的store,而通过props获取的参数是非同步的,那么方法就是在相邻更新的时候,直接使用store的值来处理,dva中是否有类似的方法?

参考umi中访问store的方法,可以直接访问window.g_app._store.getState()

Use umi with dva​umijs.org

测试了下可以产生联动效果,不知道为什么服务器配置的值最后是没有变化,但是下面的资源选择确实是产生了因为服务器配置变化的变化,中间打印服务器配置的值确实也已经修改了。

在触发资源配置的更新reducer的时候好像把之前的服务器配置的值更新掉了

打印结果是

更新操作传的action并没有对服务器配置的内容,因为更新函数:

取的是原来的值,此时没有涉及到的就还是原来的,还是异步造成的问题,相当于说所有单独抽象出来对store更新的函数,保险起见,获取之前的值的时候都需要用getState()来获取,而不是props中获取。

这样在代码中就很不优雅也很混乱,意义也很不直观地表明其实这里有一个store的同步问题,相比之下setState的回调函数写法就很明确

到这里,其实发现使用state来处理页面更为合理,更深入一点,类似这种表单联动的组件,表单数据的修改其实算是一种状态,因为别的会根据状态来更新数据,而不是说是根据数据来更新数据,那么一个表单的值它就不是纯数据,而是状态,因此更适合用state。

在所有数据都修改完之后,整体的数据就变成一次纯数据,一次保存到props中,下次组件初始化的时候直接使用一次这个数据,这就不是状态,所以这个情况使用state其实是更为合适。

dva处理_dva中使用store管理数据的异步问题相关推荐

  1. 闲云旅游项目开发-(第二篇:实现登录功能,使用vuex的store管理数据)

    目录 一 登录注册页布局 二 登录功能 1.思路 2.实现步骤 2.1 新建登录表单组件 2.2 表单数据绑定及验证 2.3 登录接口 3.总结 三  使用vuex/store管理数据 1.思路 2. ...

  2. IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/中后台/体验管理等)之详细攻略

    IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/Node/IDE/中后台/体验管理/ ...

  3. 机器学习如何帮助企业高效地管理数据?

    机器学习是当今技术领域的热门话题.从自驾车,到反恐斗争中捕捉邪恶的内容,应用程序在您拍摄照片之前自动美图等,这些应用程序无处不在.每一项创新都创造了一个新的商业机会,同时简化和自动化通常远远超出了我们 ...

  4. SQL Sever 创建与管理数据表

    目录 一.创建数据表 1.使用SQL Sever Management Studio创建数据表 2.使用CREATE TABLE语句创建数据库 二.管理数据表 1.查看表结构 1.1查看数据表的属性 ...

  5. 在微服务中如何管理数据

    来自Stitch Fix团队的工程副总裁Randy Shoup在QCon纽约2017会议上讨论了如何在基于微服务的应用中管理数据和隔离持久化.他还介绍了将事件(Event)作为微服务的第一类构造.他介 ...

  6. 数据库笔记03:管理数据表中的数据

    /***************************  第三单元:管理数据表中的数据 ***************************/ /************************* ...

  7. vue中的状态管理 vuex store

    vuex store 是响应式的,当vue组件从store中读取状态(state)时,若store中的状态发生更新时,会及时的响应给其他的组件. store 中的四个核心选项:     state m ...

  8. Mac电脑Safari 浏览器中Cookie 和网站数据如何管理

    Safari 浏览器是Mac电脑上自带的一款非常好用的浏览器,如何管理Safari 浏览器中Cookie 和网站数据呢?跟随小编一起来看看吧! 可以更改 Safari 浏览器偏好设置中的选项,从而让 ...

  9. flyway spring_关于使用Flyway在Spring Boot中管理数据更改的建议

    flyway spring 介绍 (Introduction) Database migrations are essential for the development of an applicat ...

最新文章

  1. oracle静默安装集群,静默安装Oracle数据库10g篇
  2. jaas_受JAAS保护的JAX-RS端点
  3. 我到底该信谁?另外,我发现了抢火车票的秘密
  4. Spring学习总结(31)——Spring Bean 生命周期总结
  5. python 菜鸟-Python3 集合
  6. Leetcode 147 Insertion Sort List
  7. 程序员的思维修炼:开发认知潜能的九堂课
  8. MAC 下 excel 如何使用加载项(宏)
  9. unity素材一:奥日与黑暗森林风格2D场景
  10. 全面拆解携程云原生实践,打造智能弹性的云端酒店直连系统
  11. 计算机主机上有几个按钮,键盘按键有什么功能 电脑键盘上各个按键功能详解...
  12. 论文阅读:《Rethinking Pseudo-LiDAR Representation》
  13. uniapp 使用支付宝扫码插件
  14. P2015 二叉苹果树 树形DP
  15. 软件工程概念总结-期末重点-(简单中文+英文关键词)-第一部分软件过程(第1-6章)-罗杰S普莱斯曼
  16. redis简单分布式锁实现 超简单的那种
  17. echart图表环形图(饼图)
  18. npm ERR code1
  19. rfid测试软件,采用软件定义无线电开发RFID测试平台
  20. 图片多样化切换_您想让您的工作室更多样化吗?

热门文章

  1. [TimLinux] scrapy 在Windows平台的安装
  2. 《Java技术》第七次作业计科1501赵健宇
  3. 带你秒学JavaScript
  4. 信息安全学习笔记--CSRF
  5. .net 初学者。学习笔记 [获取varchar32主键的最大ID值]
  6. 利用ASPJPEG组件生成中文验证码
  7. 【Python】常用字符串api
  8. python线程监控_一日一技:Python多线程的事件监控
  9. 手把手教你下载安装配置Fiddler 和 Fiddler Everywhere
  10. Fuchsia编译及运行