我一直在阅读(我只是使用react来创建一个测试应用程序以查看反应是如何工作的)状态应该存储在根组件中,当状态改变时,应该重新呈现整个树。
目前我已经创建了一个引导程序导航栏。
root
--> NavBar
--> NavHeader
--> NavMenuBar
--> NavMenuItem
...
--> PageContent
--> Footer
我将活动菜单项存储在NavMenuBar组件中。然后,当单击菜单项或其中一个子项时,将使用回调来更新NavMenuBar中的状态,并对重新呈现的菜单项进行反应。
这工作正常,但现在我想知道是否应该将活动菜单项存储在NavMenuBar组件中。我应该将状态存储在根组件中并移动回调方法以更新菜单状态吗?我不明白为什么root应用程序需要跟踪活动菜单项,但很多博主/文章建议我应该使用所有状态的根组件,但是在这个FB页面上:
https://facebook.github.io/react/docs/thinking-in-react.html
在“第4步:确定你的国家应该在哪里”,他们说你应该找到一个共同的父母来存储状态,而不是提到将所有内容存储在root中。
PS:我知道有一个用于渲染BS导航栏的NPM组件,但我自己这样做是为了更多地了解反应。
答案 0 :(得分:2)
哪个组件存储状态数据,哪些不是完全可供您选择。
主要有两种类型的组件,一种具有数据,另一种不具有数据。这有很多名字,略有不同,有利有弊。
https://jaketrent.com/post/smart-dumb-components-react/
https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0
人们建议解决一些反复出现的问题。如果您没有问题,那么您将永远不需要解决方案。
答案 1 :(得分:1)
说实话,突出显示活动菜单项不会对应用程序造成太大影响,因此我坚持在子组件中使用它,因为通过所有这些组件传播舞台只会创建不必要的样板代码。