【发布时间】:2020-01-31 01:28:57
【问题描述】:
我有这个 Redux 操作,它查找用户并返回他们拥有的所有项目:
export const itemsFetch = () => {
const { currentUser } = firebase.auth();
return dispatch => {
firebase
.database()
.ref(`users/${currentUser.uid}/items`)
.on('value', snapshot => {
dispatch({ type: ITEMS_FETCH_SUCCESS, payload: snapshot.val() });
});
};
};
效果很好,返回的每个项目都有一个与之关联的唯一键。
我想修改此操作以查找特定项目,我已经完成了。这也很好用:
export const itemLookup = uid => {
const { currentUser } = firebase.auth();
return dispatch => {
firebase
.database()
.ref(`users/${currentUser.uid}/items/${uid}`)
.on('value', snapshot => {
dispatch({ type: ITEM_LOOKUP_SUCCESS, payload: snapshot.val() });
});
};
};
这也很好用,但我只能用它来查找单个项目。
我想遍历一组项目 ID,并查找每个项目的详细信息。从组件执行此操作并使用 mapStateToProps 会导致组件每次重新呈现,从而丢失进程中的先前查找。
最好在组件级别遍历我拥有的 id,并进行多次调用。或者我应该将数组传递给动作,并以某种方式在动作中循环它们?
谢谢
我觉得我在做一些愚蠢的事情,或者完全误解了 Redux。
【问题讨论】:
-
我认为你应该更新你的 reducer 以期待两个动作,一个说我开始查找一个新的 ID 列表,这应该清除当前列表。每次 API 请求返回时,应该分派另一个操作,reducer 获取该值并将其添加到当前列表中。
-
谢谢 - 我认为这是有道理的。您能否提供一个简短示例,说明如何在该 reducer 中构建结果数组?目前它只返回 action.payload
-
case GET_VALUE_SUCCESS: return { ...state, myArray: [...state.myArray, action.newValue] } 类似的东西,或者你喜欢做数组连接/合并
标签: reactjs firebase react-native firebase-realtime-database react-redux