Remix中能否脱离fetcher.Form使用fetcher.submit?useSubmit差异解析
React Router useFetcher 脱离表单使用的合规性及与 useSubmit 的区别
1. 移除<Form>标签后使用fetcher.submit是否合规?
完全合规。useFetcher的设计初衷就包含脱离DOM表单发起动作调用的场景,它的submit方法可以直接接收数据、请求配置等参数,不需要依赖<Form>标签。这种用法刚好能解决你遇到的表单嵌套触发validateDOMNesting错误的问题,是官方支持的用法。
2. useSubmit 是否有优先使用的理由?
要看你的需求场景:
- 如果你需要提交后触发页面导航(比如提交表单后跳转到详情页),
useSubmit更合适,它的默认行为就是发起导航式的提交。 - 但像你这种需要后台提交追踪事件、不需要页面跳转的场景,
useFetcher.submit才是正确选择——这也解释了你替换成useSubmit后出现意外导航的原因:useSubmit本身就是为导航式提交设计的,而fetcher.submit默认是无导航的后台提交。
3. 未使用useFetcher的其他返回值是否会造成额外开销?
不用担心额外开销。React Router的hooks都是轻量级实现,未使用的返回值(比如data、state、formAction等)都是按需计算的,而且React的tree shaking机制会自动剔除未使用的代码部分,不会对性能造成明显影响。
内容的提问来源于stack exchange,提问作者Jonathan Tuzman
相关产品推荐
相关产品推荐

