是的,我认为你在“只有一个组件应该有状态”的想法是正确的轨道。关于你的问题的评论是正确的,状态可以放在React的组件树中的任何地方 - 这通常是你对与UI有关的状态(例如是否选择该按钮)做的事情。但是当涉及到应用程序状态,即应用程序正在呈现的数据时,将所有数据放在一个地方通常很方便。
刚开始考虑纯数据结构时,不用担心React。
它可能要结束了看起来像预算对象的数组,而内部的每个那些预算的对象有项的数组:
[
{
title: 'Vacations',
entries: [
{
spent: 10,
place: 'San Francisco',
...
},
...
],
},
...
]
然后当谈到反应,你会希望把该状态在主要的<App />
组件中。 <App />
的责任将是呈现<Budget />
组件的列表。这些预算组成部分中的每一个都会将它的数据和条目作为道具传递给它。因此,像,
class App extends Component {
constructor() {
this.state = {
budgets: [... as above ...]
}
}
render() {
const { budgets } = this.state
return (
<div>
{this.state.budgets.map(budget => {
<Budget key={budget.title} {...budget} />
})}
</div>
)
}
}
里面<Budget />
可以渲染<Entry />
组件数组以类似的方式,因为每个<Budget />
将收到entries
数组作为道具。
在不断变化的数据,只要你从<App />
到子组件传递下去处理器,以及那些处理器调用setState()
内<App />
进行修改,预算数据,那么你的应用程序将响应这些变化和重新渲染方面从上到下。
“只有一个组件应该有状态”根本不是真的。任何组件都具有状态是完全正常的。即使表示组件也可以拥有自己的状态。你提出的所有IMO都不是不好的做法。 –