因此,我正在使用Immutable對象構建React-Redux應用程序,並且需要使用從API端點獲取的一些數據更新我的狀態。更新不可變數據並在Javascript中返回承諾
這裏是我的國家結構之前,我在將數據添加
const state = fromJS({
tickers: ['AAPL', 'TSLA', 'GOOGL'],
data: {
AAPL: Map(),
TSLA: Map(),
GOOGL: Map()
}
});
的想法是,我取數據進入數據對象
這裏各自的股票鍵是代碼,我嘗試取數據並更新它
export function requestAPIData(state, tickerArray){
return dispatch => {
return yahooFinance.historical({
symbols: tickerArray,
from: '2012-01-01',
to: '2012-01-05',
period: 'd'
}, (err, quotes) => {
throw new Error('err');
}).then(result => {
addDataToKeysFunction(state, result);
}).then(() => {
console.log(state);
dispatch(success());
})
}
}
function addDataToKeysFunction(state, data){
return new Promise ((resolve, reject) => {
for(let key in data){
console.log(data[key]);
state.setIn(['data', key], data[key]);
}
resolve();
})
}
所以,這是什麼使我困惑。如果我只是在狀態對象上調用state.setIn,它將只會暫時更新,因爲在您返回狀態(?)之前,不可變對象不會更新。但是,我也回覆了一個需要解決或拒絕的承諾。我如何確保國家得到更新並解決承諾。
我對處理Immutable數據結構相對比較陌生,所以如果有什麼明目張膽的我不見了,請指出。此外,如果使用回調是完成此操作的唯一方法,那也沒關係。
我強烈建議您投入一小時的時間觀看在redux.js上找到的免費[Redux入門](https://egghead.io/courses/getting-started-with-redux)視頻.org(由Redux的創建者創建)。它真的可以幫助你思考如何減少不可變狀態,而不是直接改變它。 – jehna1
@ jehna1 - 嘿,是的,我已經經歷過這些視頻,我喜歡它們。他們是我決定開始使用Immutable JS的主要原因,因爲它們使得處理redux應用程序數據變得更加容易。但是,他們沒有關於Immutable JS本身的任何信息,而Immutable的TypeScript文檔也沒有幫助。 –
我建議你重新討論使用減速器來改變狀態的那些。 – jehna1