2017-11-01 3 views
0

私はfirebaseにプッシュする必要があるオブジェクトの配列を持っています。各オブジェクトには独自のプッシュキーが必要です。私がこれを達成するための唯一の方法は、配列上のマップで、個々のオブジェクトプッシュを処理するreduxアクションに各オブジェクトを渡すことです。私はこれを行う最良の方法ではないことを知っており、これが他にどのように達成できるのだろうと思っていましたか?アレイからのReact/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"

このことはできませんか?代わりに私は約束を使用すべきですか?

私はこれに答えがあると確信していますが、私はそれを見つけることができないので、どんな方向にも大いに感謝します!ありがとう!

以下は、私はそれを考え出したfirebaseデータのためのスクリーンショットと私の配列データ[OK]をFirebase Data Array Data

+0

あなたFirebaseデータ構造とアップデートしようとしているデータの構造を投稿してください。 Firebaseを単純な配列で更新することはできません。リアルタイムデータベースは基本的に大きなJSONオブジェクトツリーです。ただし、単一のオブジェクトを使用してデータベースを一度に更新することはできます。オブジェクトは、更新したいキーとデータだけを含むFirebaseデータベースと同じ構造にする必要があります。 Firebaseはあなたがrefを更新するときにそれらをマージする作業を行います。 – jered

+0

がスクリーンショットを追加しました!あらかじめ助けてくれてありがとう。 – livehappydrinkcoffee

+0

新しいエントリを追加しようとしていますか、既存のエントリを更新しようとしていますか? "markets"、-Kx_r3 ...および-KxcWq ...のエントリのキーの妥当性は何ですか? – jered

答えて

0

です。

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

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

関連する問題