我的陣營App有狀態稱爲googleAccounts它最初是空的:如何迭代和調用更新React狀態散列的每個單獨元素的函數?
getInitialState() {
return {
value: '',
googleAccounts: {}
};
},
我有一個簡單的搜索欄。當執行搜索時,服務器與Google的API進行通信以獲取該搜索的帳戶列表,然後googleAccounts
用帳戶填充。這項功能非常出色,帳戶顯示在搜索欄下方作爲搜索結果。
searchGoogleAccounts(e){
e.preventDefault();
Client.getGoogleAccounts(this.state.value, (accounts) => {
this.setState({googleAccounts: accounts});
});
},
然後我想利用每個帳戶,並將其發送到Atlassian的API,看看是否在Atlassian的數據庫中存在的帳戶。我創建了一個接受帳戶名稱的函數,並且如果存在該名稱的Atlassian帳戶,它將以JSON形式返回該帳戶。這個功能也可以正常工作。
我只是不確定我應該如何使用這個函數來正確地與DOM交互。如果有Atlassian帳戶,我想顯示覆選標記。如果沒有帳戶,我想顯示一個按鈕來創建Atlassian帳戶。當它正在等待來自Atlassian API的響應時,我想顯示一個加載圖標。
我試着給googleAccounts
中的每一個添加一個atlassian
屬性。這種方法的問題是我每次抓取一個atlassian
帳戶時都必須更新整個googleAccounts
。因此,單獨的呼叫將同時更新googleAccounts
並覆蓋彼此的更改。我想直接在函數內改變DOM,但我認爲這被認爲是不安全的。我不知道我最好的選擇是什麼,任何建議,將不勝感激。
由於您正在管理多件物品的狀態,因此我會考慮Redux,因此Reducer可能會有所幫助。 – Eldelshell
請說明你如何使用'setState'來更新'atlassian'屬性。拋開這樣的細節會讓你很難知道你做錯了什麼。我發佈了一個答案,但我假設你遇到了這個問題。如果這是錯誤的,你應該展示你已經試圖幫助縮小問題的範圍,儘管它是正確的,但是對於發現這個問題的任何人來說,看到最初的嘗試與提議的解決方案形成對比是很有幫助的。 – philraj