React项目中发送两次请求
做项目的时候发现,在开发下每个请求都发送了两次,而在线上环境上不会出现这种情况。结果排查发现是在项目中顶层组件中使用了React.StrictMode包裹组件。
官网资料:react.docschina.org/reference/r…
React.StrictMode作用:
- 组件将 重新渲染一次,以查找由于非纯渲染而引起的错误。
- 组件将 重新运行 Effect 一次,以查找由于缺少 Effect 清理而引起的错误。
- 组件将被 检查是否使用了已弃用的 API。
React.StrictMode表现:
严格模式 在开发环境中会调用一些函数两次(仅限应为纯函数的函数)。这些函数包括:
- 组件函数体(仅限顶层逻辑,不包括事件处理程序内的代码)
- 传递给 useState、set函数、useMemo 或 useReducer 的函数。
- 部分类组件的方法,例如 constructor、render、shouldComponentUpdate 等(请参阅完整列表)。
- 每个 Effect 额外运行一次 setup 和 cleanup 函数
React 假设编写的每个组件都是纯函数。这意味着编写的 React 组件在给定相同的输入(props、state 和 context)时必须始终返回相同的 JSX。所以猜测React.StrictMode调用两次进行比对JSX进行发现问题。