这是一个话题性值得问题:
例如:redux 申请了一份数据 store , 整个应用有特别多的地方在修改这个 store , 现在数据出现异常, 如何排查是哪儿场景修改的这份 store 导致的异常;
不仅仅是针对 redux , 我们面临可能是全局对象等场景,对被多个调用方修改的现象。
这个没有一个标准答案, 可以咨询去探索。
作者给几个意见:
-
首先不允许直接修改对象, 必须要经过一个封装函数去修改, 修改的时候, 必须要传递
actionUser
信息, 这个actionUser
表示调用方是谁; -
怎么约束这个事儿呢?就比如我封装了一个函数去修改全局对象,但是就是有人要手动去改这个全局对象。 那么处理方式就是将这个全局对象冻结, 或者 proxy 劫持。 例如 formily 表单里面的 value 就是 proxy 劫持的, 只能允许用户去通过 onChange 修改。
-
那如何保证调用方就一定会传递
actionUser
信息呢;因为是一个函数, 所以要是调用方不传递这个会咋样; 解决办法最强硬的就是, 如果不传递actionUser
就直接不执行, 同时throw error
;稍微温和一点儿就是写一个 eslint 插件, 给予 error 提示;最温和的方式, 就是用 TS interface 去约束入参;