将阵列与React和Redux结合使用
问题描述:
我有一个像Facebook聊天窗口一样工作的聊天窗口小部件。当我向上滚动时,我正在实现无限的消息加载。我现在遇到的问题是如何将下一个消息范围与前一个范围结合起来,因为当前我在调用下一个范围时会替换先前的范围。我已经把我的代码示例为简洁:将阵列与React和Redux结合使用
constructor(props) {
super(props);
this.props.getMessages(1) // axios call, returns first range
}
handleScroll(event) {
//some scroll logic
this.props.getMessages(2)
//axios call, returns 2nd range
//for simplicity i just call 2 ranges for now
}
function mapStateToProps(state) {
return {
messages: state.messages
};
}
export default function (state = {fetched: false}, action) {
switch (action.type) {
case 'FETCH_MESSAGES_FULFILLED':
return {...state,
data: action.payload
}
break;
}
return state;
}
数据模型:
[
{
msg_id: 1,
to_id: 1,
from_id: 2,
message: "Marzipan jelly-o croissant sweet gummies chocolate croissant marzipan. Jujubes soufflé tiramisu halvah chocolate oat cake jelly1"
},
{
msg_id: 2,
to_id: 1,
from_id: 2,
message: "Jelly sw2"
}
]
答
你希望将消息附加到数据,而不是取代它。与扩散运算符的语法你可以简单做到像
var initialState = {
fetched: false,
data: []
}
export default function (state = initialState, action) {
switch (action.type) {
case 'FETCH_MESSAGES_FULFILLED':
return {...state,
data: [...state.data, action.payload]
}
break;
}
return state;
}
这是假设data
是一个数组。
由于某种原因,我没有调出数据来编辑我的问题以显示我的数据模型 –
您的初始状态中没有'data',因此传播将失败。 – loganfsmyth
@loganfsmyth感谢您的建议。更新了答案 –