React-admin中WithRecord与TextField的RecordContext不一致问题
以下是几种可能导致这个不一致问题的原因:
版本不匹配或依赖冲突
你的项目中ra-core和react-admin可能存在版本不一致的情况,或者安装了多个版本的ra-core。WithRecord和TextField如果分别依赖不同版本的RecordContext,就会出现前者读取新上下文、后者读取旧父级上下文的情况。这种依赖冲突在沙箱里因为是全新安装不会出现,但实际项目中可能因为依赖升级不彻底、npm link调试等原因发生。TextField的上下文优先级逻辑
某些react-admin版本中,TextField会优先读取FormContext中的record值,而不是RecordContext。如果你的ModalComponent被包裹在Form、Edit这类提供FormContext的组件中,即使你覆盖了RecordContext,TextField还是会取FormContext里的父级record。而WithRecord是直接绑定RecordContext的,所以不受影响。自定义组件或全局覆盖
项目中可能存在自定义的TextField组件,或者通过webpack alias、全局导入覆盖了react-admin的默认TextField。这个自定义组件没有正确实现RecordContext的消费逻辑,而是直接从父级上下文读取数据,导致和WithRecord的表现不一致。React渲染时机或上下文穿透问题
实际项目中可能有其他高阶组件(比如权限控制、缓存组件)包裹了ModalComponent,这些组件可能干扰了上下文的传递。或者在React并发模式下,某些组件的渲染优先级不同,导致TextField在RecordContextProvider更新前就完成了渲染,读取到了旧的上下文值。
内容的提问来源于stack exchange,提问作者Heikkisorsa

