我正在學習反應,我正在嘗試創建一個TreeView組件。 這個TreeView可以接收數據本身(通過'數據'道具)或作爲一個URL到其他資源。我在這裏專注於最後一個選項。我應該使用道具還是狀態來存儲TreeView數據?
組件首先呈現爲「加載」狀態,並且ajax調用是在componentDidMount上進行的。 當數據從REST服務返回時,我只是將它分配給組件的'props.data'和setState({loading:false}),並且它正確地呈現填滿的樹。
這裏的一個問題是,我從組件本身變異的道具是一種反模式,但它也不適合將數據添加到狀態。 我傾向於將狀態視爲與UI交互相關,並將其用於「摺疊」或「選定」之類 當更新父組件(包含TreeView的組件)時,TreeView的'data'prop被重置(componentDidMount未被調用所以它甚至不會被再次提取)和組件中斷。 使用'狀態'解決了這個問題,因爲它在此父級重新呈現過程中保留了值。
應該在這裏使用狀態?有沒有更好的模式呢?
除了從服務器檢索數據還有改變樹數據本身的問題(如移動樹項目沒有其他地方) 現在我只是改變'props.data'中的項目,並強制更新相關的內部組件。
我應該只是在TreeView根組件中使用state和setState,並讓它再次區分整個事物嗎?這是一棵相當大的樹...... 我是否應該將樹包裹在一些其他將傳遞數據的數據組件中?
有人可以幫助找到構建此組件的最佳方式嗎? 感謝和聖誕快樂:)