Javascript 为什么create-react-app会将app.js文件创建为功能组件?

Javascript 为什么create-react-app会将app.js文件创建为功能组件?,javascript,reactjs,create-react-app,Javascript,Reactjs,Create React App,我试图学习React,我注意到当我使用npx create React app my project时,它将app.js文件创建为一个功能组件,而不是类组件,就像在以前的版本中一样。我在CreateReact应用程序的repo上找到了commit,他们在那里更改了它 我想弄明白的是他们为什么这么做?我读了一篇关于类组件和功能组件的文章,据我所知,功能组件是无状态的。我一定是误解了,或者可能只是还不完全了解这方面的知识,因为我不明白为什么我们希望整个应用程序的主要组件是无状态的 另外,我知道可以很

我试图学习React,我注意到当我使用
npx create React app my project
时,它将
app.js
文件创建为一个功能组件,而不是类组件,就像在以前的版本中一样。我在CreateReact应用程序的repo上找到了commit,他们在那里更改了它

我想弄明白的是他们为什么这么做?我读了一篇关于类组件和功能组件的文章,据我所知,功能组件是无状态的。我一定是误解了,或者可能只是还不完全了解这方面的知识,因为我不明白为什么我们希望整个应用程序的主要组件是无状态的


另外,我知道可以很容易地将
App.js
文件更改回类组件,但我试图理解为什么他们会将其更改为默认的功能组件。

React建议使用功能组件和挂钩,因为基于类的组件可能会导致一些不必要的困难:

类混淆了人和机器

除了使代码重用和代码组织更加困难之外,我们还发现类是学习的一大障碍。您必须了解
这个
在JavaScript中是如何工作的,这与大多数语言中的工作方式非常不同。您必须记住绑定事件处理程序。如果没有不稳定的语法建议,代码非常冗长。人们可以很好地理解道具、状态和自上而下的数据流,但仍然难以处理类。React中函数和类组件之间的区别以及何时使用每一个组件都会导致分歧,即使在经验丰富的React开发人员之间也是如此

此外,React已经发布了大约五年,我们希望确保它在未来五年内保持相关性。正如苗条、棱角分明、闪闪发光等所显示的那样,组件的提前编译具有很大的未来潜力。特别是如果它不限于模板。最近,我们一直在尝试使用Prepack进行组件折叠,我们已经看到了有希望的早期结果。然而,我们发现,类组件会鼓励无意的模式,使这些优化倒退到一个较慢的路径。类也为今天的工具带来了问题。例如,类不能很好地缩小,并且它们使热重新加载变得脆弱和不可靠。我们希望提供一个API,使代码更有可能保持在可优化的路径上

为了解决这些问题,挂钩允许您在不使用类的情况下使用React的更多功能。从概念上讲,React组件总是更接近功能。挂钩包含功能,但不牺牲React的实践精神。钩子提供了访问命令式逃生舱口的途径,不需要您学习复杂的函数式或反应式编程技术


默认情况下使用功能组件可以让学习React的人(以及那些已经知道React但更喜欢使用功能组件的人)更容易一些。

我认为:也许对于新手来说,应该尽早开始使用最新的功能“挂钩”。因此,将App.js更改为功能组件使基于senseClass的组件也可以是无状态的。FB推动功能组件和状态挂钩,因为在他们看来(我同意),这会导致更干净、更少的错误代码。(尽管react钩子和依赖项给新手带来了全新的困惑)。我还想为其他没有意识到功能组件在本文档中并非真正“无状态”的新手添加一件事: