是的,我認爲你在「只有一個組件應該有狀態」的想法是正確的軌道。關於你的問題的評論是正確的,狀態可以放在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都不是不好的做法。 –