编辑页填了 12 个字段没保存就切到列表,再点新建,输入框里全是上一单的内容,手机号也带过来了。乍看像缓存或者权限的锅,追下去往往不是。

const draftKey = id ? `draft:${id}` : 'draft:new';
useEffect(() => () => dispatch(clearDraft(draftKey)), [draftKey]);

追下去是这么回事:草稿被放进全局 store,组件卸载时没有清,路由切换只是换了视图。新建和编辑共用同一个 draft 键,上一单的数据原样留在里面。

「Redux 表单草稿残留」这类改动最怕改一半,回滚脚本先准备好,再动生产。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

具体做法是,草稿改放组件内部 state 或 useRef 随卸载销毁;确实要跨页保留就按单据 id 分键 新建用独立键;进入页面时显式初始化 不要依赖上次遗留的值;提交成功或取消时清掉对应键。

验收就看一点,从编辑页返回再进新建页,12 个字段都是空的,只有原单据 id 能读回自己的草稿。

作者 9823189