我只是使用create-react-app设置制作一个简单的配方提取应用程序,但是当我尝试记录响应时,它记录了两次。我向后移动并删除了代码,直到它停止发生,并且无论出于何种原因,当我使用状态钩子时它都会启动:
C:\Windows\system32>robocopy C:\Windows\Fonts C:\dest /E /a+:rc
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : torsdag 30. april 2020 12:40:08
Source : C:\Windows\Fonts\
Dest : C:\dest\
Files : *.*
Options : *.* /S /E /DCOPY:DA /COPY:DAT /A+:RC /R:1000000 /W:30
------------------------------------------------------------------------------
New Dir 547 C:\Windows\Fonts\
100% New File 10976 8514fix.fon
2020/04/30 12:40:08 ERROR 5 (0x00000005) Changing File Attributes C:\Windows\Fonts\8514fix.fon
Access is denied.
Waiting 30 seconds...
答案 0 :(得分:3)
这是故意的,它是React.StrictMode
(特别是detect unexpected side effects)的一部分:
严格模式无法自动为您检测副作用,但是 可以使它们更具确定性,从而帮助您发现它们。 这是通过有意重复调用以下功能来完成的:
- 类组件
constructor
,render
和shouldComponentUpdate
方法- 类组件静态
getDerivedStateFromProps
方法- 功能组件主体
- 状态更新程序功能(
setState
的第一个参数)- 传递给
useState
,useMemo
或useReducer
的功能
如果从StrictMode
中删除index.js
元素,则会看到输出仅记录一次:
ReactDOM.render(<App />, document.getElementById('root'));
请注意,在严格模式下,这仅发生在开发中,而不发生在生产中。