【问题标题】:Firebase React/Redux multipath updates from array来自数组的 Firebase React/Redux 多路径更新
【发布时间】:2017-11-01 17:39:51
【问题描述】:

我有一组对象需要推送到 firebase。每个对象都应该有自己的按键。我能够做到这一点的唯一方法是在数组上映射并将每个对象传递给处理单个对象推送的 redux 操作。我知道这不是最好的方法,并且想知道这还能如何实现?

当我尝试将数组传递给操作(以构建更新对象以传递给 firebase.database().ref().update())时,我收到一条错误消息,指出它只能接受普通对象。数组是否需要转换为对象。

const arr = [{0: "x", 1:"y"}, {0:"a", 1: "b"}]
this.props.action(arr)// throws error "Actions must be plain objects"

这不可能吗?我应该改用 Promises 吗?

我确信有一个答案,但我找不到它,所以任何方向都将不胜感激!谢谢!

以下是 firebase 数据和我的数组数据的屏幕截图

Firebase Data Array Data

【问题讨论】:

  • 发布您的 Firebase 数据结构以及您尝试更新的数据结构。你是正确的,你不能只用一个普通的数组来更新 Firebase——实时数据库基本上是一个大的 JSON 对象树。但是,您可以使用单个对象一次性更新数据库。该对象的结构需要与您的 Firebase 数据库相同,仅包含您要更新的键和数据。当您更新参考时,Firebase 将完成合并它们的工作。
  • 刚刚添加了截图!提前感谢您的帮助。
  • 您是在尝试添加新条目,还是更新现有条目? “markets”下条目的key,-Kx_r3...和-KxcWq...的相关性是什么?
  • 我正在添加新条目。密钥的原因是因为我需要稍后获取它们并将特定市场(用户选择)添加到其他集合
  • 抱歉,我刚刚意识到我截错了 - 现在更新。

标签: reactjs firebase redux


【解决方案1】:

好的,我想通了。

//action (passed attendingMarkets array)
export const vendorTest = (vendorUid, attendingMarkets) => {
	var updates = {};

	attendingMarkets.map((map, idx) => {
		const date = map.date;
		const market = map.market;
		var newMarketKey = firebase
			.database()
			.ref()
			.child("/vendors/" + vendorUid + "/markets")
			.push().key;
		updates["/vendors/" + vendorUid + "/markets/" + newMarketKey] = {
			date,
			market
		};
	});
	return dispatch => {
		firebase
			.database()
			.ref()
			.update(updates)
			.then(() => {
				dispatch({ type: VENDOR_ADD_MARKETS });
			});
	};
};

【讨论】:

    猜你喜欢
    • 2018-12-01
    • 1970-01-01
    • 2017-11-13
    • 2020-04-15
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多