因此,我正在使用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