質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

2回答

439閲覧

〇〇を含むデータを取る/絞りたい(react native)

yamady

総合スコア176

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/07/05 16:18

編集2018/07/06 01:06

いつもお世話になっております。

React Nativeと、Firebaseを使って、TODOアプリを作っています。
取得した曜日(getDay)と、TODOを作った時に指定した曜日が一致している時にホームに表示する仕組みを実装したいと考えています。

Firebaseには、orderByChildでフィルタリングできるのですが、複数のキーワードを指定することができませんでした。

例)
月曜と、火曜にゴミ出しをすると指定して、TODOを作成する。
実際の曜日が月曜になると、ホームにTODOとして表示される。

開発環境

react-native 0.53.0
react-native-firebase ^3.2.2

エラー

for文もしくは、lodashを使うのが適切かなとも思っていますが
まだやり方を迷っています。

ソースコード

Firebaseに保管されているJSONデータ

イメージ説明

todoActions.js(redux)

JavaScript

1export const todosFetch = () => { 2 console.debug("todosFetch start"); 3 4 return (dispatch) => { 5 firebase.database().ref(`/todos/`) 6 // Firebaseならここで .orderByChild でフィルターします 7 .once('value', snapshot => { 8 // ここでfor文かlodashの処理が必要かと考えています 9 const todos = snapshot.val(); 10 return todos; 11 }) 12 .then((todos) => { 13 const userPromises = _.map(todos.val(), async (todo, todoId) => { 14 return firebase.database().ref(`/users/${todo.uid}`).once('value') 15 .then(snapshot => snapshot.val()) 16 .then(user => ({...todo, user, todoId})); 17 }); 18 dispatch({ type: 'ui/loading/hide' }); 19 return Promise.all(userPromises); 20 }) 21 .then(todoItems => { 22 dispatch({ type: 'todos_fetch_success', payload: todoItems }); 23 }); 24 }; 25};

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yatima

2018/07/06 00:32

「Firebase側で適切なフィルタリング機能がない」とはどういう意味でしょうか?
yamady

2018/07/06 01:07

失礼しました。質問内容を編集しました。
guest

回答2

0

ベストアンサー

いまいちデータの構造が理解できなかったので勝手に解釈しました。
Array.prototype.filter() を使えば絞り込みできますし、 Array.prototype.some() を使えば一つでも条件に合致すれば true を返せます。
react native、 リリースビルドするとランタイムの違いでメソッドが実装されてなかったりしますが(String#padStart() とか)、 .filter と .some は普通に動いた気がするので、 外部ライブラリ使う必要無い気がします。まあ未実装であれば Polyfill かけば良い話で。

js

1const todo = [{ 2 label: '燃えるゴミ', 3 selectedWeekDays: [{ 4 label: 'Monday', 5 value: 1, 6 }, { 7 label: 'Thursday', 8 value: 5, 9 }], 10}, { 11 label: 'プラスチック', 12 selectedWeekDays: [{ 13 label: 'Thursday', 14 value: 4, 15 }] 16}, { 17 label: '資源ゴミ', 18 selectedWeekDays: [{ 19 label: 'Friday', 20 value: 6, 21 }], 22}, { 23 label: '金曜市', 24 selectedWeekDays: [{ 25 label: 'Friday', 26 value: 6, 27 }], 28}]; 29 30// 今日の曜日を整数で返す関数 31const getTodaysWeekDay = () => (new Date()).getDay() + 1; // -> 6 32// タスクが今日の曜日を指定されているなら true を返す関数 33const isTodaysTask = task => task.selectedWeekDays.some(weekday => weekday.value === getTodaysWeekDay()); 34 35const fillterdTodo = todo.filter(isTodaysTask); 36 37console.log(fillterdTodo); // -> 資源ごみ、金曜市

投稿2018/07/06 02:00

og24715

総合スコア832

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamady

2018/07/06 04:15

og24715さま、ご丁寧にありがとうございます! 参考になるやり方でした。何かとライブラリに頼ってしまう傾向があったので、ちょっと直して行きたいと思います。。。!
guest

0

各todoのデータでの曜日の保持を

sunday: 0 monday: 1 tuesday: 0 ...

といった構造にするとスマートではないでしょうか.

投稿2018/07/06 01:29

Yatima

総合スコア1159

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamady

2018/07/06 04:14

Yatimaさん、データの保持の仕方ご指摘いただきありがとうございます! おっしゃる通りですね、この構造を検討してみたいと思います(_ _)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問