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

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

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

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

React.js

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

Q&A

解決済

1回答

4538閲覧

renderにリターンするものが無いと表示される

Kana-T

総合スコア5

Firebase

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

React.js

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

0グッド

0クリップ

投稿2020/08/26 13:44

前提・実現したいこと

Firebaseからデータをとって、データを検索するという仕組みを実装したいです。
しかし、レンダーにリターンが無いとエラー表示されてしまいます。

発生している問題・エラーメッセージ

イメージ説明

Unhandled Runtime Error Error: Component(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.

該当のソースコード

ページ表示用
pages/fire_find.js

js

1import Layout from '../components/Layout'; 2import Firefind from '../components/Firefind'; 3 4export default () => { 5 <Layout header="Fire" title="Sample data."> 6 <Firefind /> 7 </Layout> 8};

コンポーネント
components/Firefind.js

js

1import React, { Component } from 'react'; 2import firebase from "firebase"; 3import "firebase/storage"; 4 5class Firefind extends Component { 6 style = { 7 borderBottom: "1px solid gray" 8 } 9 10 //初期化。ステートとイベント用メソッドの設定 11 constructor(props) { 12 super(props); 13 this.state = { 14 input: '', 15 data: [] 16 } 17 this.doChange = this.doChange.bind(this); 18 this.doAction = this.doAction.bind(this); 19 } 20 21 //入力フィールドに入力時の処理 22 doChange(e) { 23 this.setState({ 24 input: e.target.value 25 }) 26 } 27 28 //ボタンクリック時の処理 29 doAction(e) { 30 this.findFireData(this.state.input); 31 } 32 33 //検索の実行 34 findFireData(s) { 35 let db = firebase.database(); 36 let ref = db.ref('sample/'); 37 let self = this; 38 ref.orderByKey().equalTo(s).on('value', (snapshot) => { 39 self.setState({ 40 data:snapshot.val() 41 }); 42 }); 43 } 44 45 //テーブルの内容の作成 46 getTableData() { 47 let result = []; 48 if (this.state.data == null || this.state.data.length == 0) { 49 return [<tr key="0"><th>NO DATA.</th></tr>]; 50 } 51 for (let i in this.state.data) { 52 result.push(<tr key={i}> 53 <th>{this.state.data[i].ID}</th> 54 <th>{this.state.data[i].name}</th> 55 <th>{this.state.data[i].message}</th> 56 </tr>); 57 } 58 return result; 59 } 60 61 //レンダリング 62 render() { 63 return (<div> 64 <input type="text" onChange={this.doChange} style={this.style} value={this.state.input} /> 65 <button onClick={this.doAction}>Find</button> 66 <hr /> 67 <table><tbody> 68 {this.getTableData()} 69 </tbody></table> 70 </div>) 71 } 72} 73 74export default Firefind;

試したこと

書籍を元にコードを入力し、テキスト比較も試しましたが異常は見当たりません。
他のfirebaseの機能(データを表示する)の時は、問題なく動きました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

fire_find.jsがなにもreturnしていないのでは?
下記では動作しますか?

javascript

1export default () => { 2 return( 3 <Layout header="Fire" title="Sample data."> 4 <Firefind /> 5 </Layout> 6 ) 7};

投稿2020/08/26 13:50

nekoniki

総合スコア2411

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

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

Kana-T

2020/08/26 22:56

returnを入れたら動きました! ありがとうございます! 書籍のスクリプトにはreturnはなかったので、不思議です。。 でも解決できてよかったです。
Kana-T

2020/08/26 23:05

exportの時に{ }を使っていたのが原因でした。この場合returnが必要ですね! 書籍の( ) にしても動きました。テキスト比較でも見逃しておりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問