【发布时间】:2019-03-22 12:30:16
【问题描述】:
const listRef = firebase.database().ref();
const reducer = (state = {}, action) => {
switch (action.type) {
case: "GET_LIST" : {
const { list } = action;
return { list };
};
case: "ADD_ELEMENT" : {
const { elementId } = action;
return { ...state, [elementId]: true };
};
default : return state;
};
};
const getList = list => ({
type: "GET_LIST", list
});
const addElement = elementId => ({
type: "ADD_ELEMENT", elementId
})
const getListFromDb = () =>
async dispatch => listRef.once("value", snap => {
dispatch(
getList(
list
)
);
});
const listenToElementAdded = () =>
async dispatch => listRef.on("child_added", ({ key: elementId }) => {
dispatch(
addElement(
element
)
);
});
const addElementToDb = () =>
async dispatch => dispatch(
addElement(
listRef.push().key
)
);
const Component = ({
list,
getListFromDb,
listenToElementAdded,
addElementToDb
}) => {
useEffect(() => getListFromDb(), []);
useEffect(() => listenToElementsAdded());
return (
<div>
{ Object.keys(list).map(id => <p>{id}</p>) }
<p onClick={addElementToDb}>Add</p>
</div>
);
};
const mapStateToProps = list => ({ list });
const mapStateToProps = {
getListFromDb,
listenToElementAdded,
addElementToDb
};
export default connect(mapStateToProps, mapStateToProps)(Component);
上面的简化示例说明了我的意思。问题是:firebase 侦听器是否足够快,可以用 redux 替换数据预调度?
如果我们想要构建一个应用程序,我们想要实时刷新来自外部的数据,监听器可以提供帮助。但是如果我们预先发送我们得到的数据,我们就会发送两次。此外,如果我们只使用侦听器并从那里分派,它可以使代码及其工作更加清洁。但是,如果我们在数据库中有大量数据怎么办?听众会很快吗?仅通过侦听器处理调度是否有效,还是值得预先调度到位?
【问题讨论】:
标签: javascript reactjs firebase firebase-realtime-database redux