为什么我的create-react-app console.log两次?

时间:2020-04-30 10:52:44

标签: reactjs create-react-app use-state

我只是使用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...

1 个答案:

答案 0 :(得分:3)

这是故意的,它是React.StrictMode(特别是detect unexpected side effects)的一部分:

严格模式无法自动为您检测副作用,但是 可以使它们更具确定性,从而帮助您发现它们。 这是通过有意重复调用以下功能来完成的:

  • 类组件constructorrendershouldComponentUpdate方法
  • 类组件静态getDerivedStateFromProps方法
  • 功能组件主体
  • 状态更新程序功能(setState的第一个参数)
  • 传递给useStateuseMemouseReducer的功能

如果从StrictMode中删除index.js元素,则会看到输出仅记录一次:

ReactDOM.render(<App />, document.getElementById('root'));

请注意,在严格模式下,这仅发生在开发中,而不发生在生产中。