ビルド反応&firebaseブログサイト:パート3
この投稿は当初出版されたon my personal blog site .
我々は、我々の反応とFireBaseシリーズの第3の部分に達しました.インpart one , 私たちはすべてを準備する方法を学んだ.Last time , 新しいブログ記事を作成するページを作りました.今日、我々は我々のFireBaseリアルタイムデータベースから単一の記事を読んで、私たちのアプリでそれらを表示するつもりです.
最初の2つの記事を読んでいない場合は、代わりに使用できるいくつかのスターターコードがあります.ちょっとあなたがステップ1、2と5に従うことを確認してくださいthe first part あなたがこれ以上行く前に.
クローン(パート3 )起動コード[オプション] 検査する 接続する
Part 2が正常に完了したら、この手順を飛ばしてください.それ以外の場合は、次のコマンドを端末で実行してコードをクローン化できます.
今すぐ実行することができます
このコンポーネントは
まず、URLからスラッグをつかみます
次に、我々は
次に、私たちは
最後に、私たちのリターンステートメントがあります.たった今、それはすべての有効なポストのために同じものを返します
まず、インポートを追加しましょう
最初の負荷 アフター アフター 私はこれらのステップが圧倒的でないことを望みます、そして、彼らはあなたがフックと州管理の力を見るのを手伝います!彼らは、私に反応について最もクールなもののいくらかです.
以下は、私が投稿している方法です.
今、あなたがクリックしたときあなたのポストの1つにリンクするか、手動で移動してください、あなたはこのように何かを見るべきです:
私はニュースレターを知っていましたか?📬
私が新しいブログ柱を発表するか、主要なプロジェクト発表をするとき、あなたが通知されたいならばhttps://ashleemboyer.com/newsletter .
どうぞsend me an email または任意の質問や懸念がある場合.私はあなたからの聴聞会が大好き!😊
我々は、我々の反応とFireBaseシリーズの第3の部分に達しました.インpart one , 私たちはすべてを準備する方法を学んだ.Last time , 新しいブログ記事を作成するページを作りました.今日、我々は我々のFireBaseリアルタイムデータベースから単一の記事を読んで、私たちのアプリでそれらを表示するつもりです.
最初の2つの記事を読んでいない場合は、代わりに使用できるいくつかのスターターコードがあります.ちょっとあなたがステップ1、2と5に従うことを確認してくださいthe first part あなたがこれ以上行く前に.
目次
Post
コンポーネントPost
コンポーネントの設定(第3部)起動コードのクローン[オプション]
Part 2が正常に完了したら、この手順を飛ばしてください.それ以外の場合は、次のコマンドを端末で実行してコードをクローン化できます.
git clone https://github.com/ashleemboyer/react-firebase-blog-starter-part-3.git
続行する前にファイルを変更する必要があります.src/firebase.js
. あなたがそれを開くならば、あなたは以下を見ますconfig
定数const config = {
apiKey: "<YOUR-API-KEY>",
authDomain: "<YOUR-AUTH-DOMAIN>",
databaseURL: "<YOUR-DATABASE-URL>",
projectId: "<YOUR-PROJECT-ID>",
storageBucket: "<YOUR-STORAGE-BUCKET>",
messagingSenderId: "<YOUR-MESSAGE-SENDER-ID>",
appId: "<YOUR-APP-ID>"
};
定数内の属性は、FireBaseプロジェクトにアプリケーションを接続するために使用されます.これらの値を見つけるには、プロジェクトの設定を左のサイドバーのギアのアイコンを使用してFirebase console . 「あなたのアプリ」の下の「Firebase SDKスニペット」にスクロールして、彼らが呼び出しているものから特質をコピーしてくださいfirebaseConfig
. 属性を置換しますconfig
これらの値を持つ定数.今すぐ実行することができます
npm install
それからnpm run start
ブラウザでプロジェクトを表示するには.2章コンポーネントの検査
このコンポーネントは
src/pages/post.js
ファイル.今のことを見てみましょう.まず、URLからスラッグをつかみます
Router
我々は2009年に設立したsrc/App.js
. コンポーネントRoute
コンポーネントRouter
を持っているmatch
プロップは彼らに送りました.この小文字をコンポーネントに送信する他の方法がありますover here .次に、我々は
postSlugs
本当のブログ記事で存在するスラグの配列である定数.あなたがデータベースを見るならば、これらは我々が第1で第2のブログ柱に与えたスラグにマッチします.問題は、このコードが動的でなく、データベースにも接続されていないことです.数分でこれに戻ってきます.次に、私たちは
slug
URLバーの1つはpostSlugs
. それがそうでないならば、ユーザーは実際に存在しないポストを見ています.だから、我々はRedirect
我々に404
コンポーネント.あなたは、より多くを読むことができますRedirect
over here .最後に、私たちのリターンステートメントがあります.たった今、それはすべての有効なポストのために同じものを返します
slug
. 代わりに、FireBaseに格納されている本当のブログ投稿コンテンツを表示します.3 .ポストコンポーネントをFirebaseに接続する
まず、インポートを追加しましょう
getFirebase
機能は、データベースから読むことができます.我々はそれをしている間、我々もインポートする必要がありますuseState
物事のカップルを管理するために.import React, { useState } from "react";
import { getFirebase } from "../firebase";
次に、どうしたらいいか考えてみましょうuseState
. 心に浮かぶ最初のことはloading
状態.これは、データベースから何かをロードしようとしているかどうかを示すブール値です.また、私たちのための変数が欲しいcurrentPost
データベースから読み取ろうとしています.置換するpostSlugs
次の2行のコードを行const [loading, setLoading] = useState(true);
const [currentPost, setCurrentPost] = useState();
ページがロードされているユーザーを示すために、ページが異なる何かを示すことができるように、我々はローディング状態で始めたいです.アニメーション、GIF、プレーンテキスト、あなたが何を喜ばせることができます.今のところ簡単にしておいてください.if (loading) {
return <h1>Loading...</h1>;
}
私たちのデータベースコールは、この前に行く必要がありますif
しかし声明.私たちがそれを置くならば、それは決して達しませんif
ステートメントはコードを初期化します.我々が我々の呼び出しの後で加えるものは、ここにありますuseState
とif
ステートメントを書きました.if (loading && !currentPost) {
getFirebase()
.database()
.ref()
.child(`/posts/${slug}`)
.once("value")
.then(snapshot => {
if (snapshot.val()) {
setCurrentPost(snapshot.val());
}
setLoading(false);
});
}
ポストが存在するかどうかのチェックを更新しましょう.更新postDoesNotExist
次に示すconst postDoesNotExist = !currentPost;
これらの条件は最初は少し混乱するかもしれません.何をチェックしていますか?ここで実行する手順をリストするのに役立つかもしれません.loading
が真でありsetCurrentPost
が定義されていないので、if
文.一旦我々がそれを作るならばthen
, if snapshot.val()
オブジェクトを返すslug
), コールsetCurrentPost
, メイキングcurrentPost
未定義.setCurrentPost
コール:この呼び出しでコンポーネントを再描画します.我々は到達if (loading && !currentPost)
再びステートメント.以来currentPost
が定義されているので、再度コードブロック内に移動しないため、データベースへの呼び出しを不必要にしないようにします.我々はif (loading)
文.loading
がtrueの場合、コンポーネントはいくつかのテキストを返し、何もしません.setLoading
コール:この呼び出しでコンポーネントを再描画します.loading
が偽ですcurrentPost
が定義されていないか、オブジェクトであるかもしれません.それがどこだif (postDoesNotExist)
チェックイン.我々がデータベースからポストを得なかったならば、我々はAを返しますRedirect
, 前に.さもなければ、我々は我々の決勝に続きますreturn
どこで我々はポストを示します.以下は、私が投稿している方法です.
return (
<>
<img src={currentPost.coverImage} alt={currentPost.coverImageAlt} />
<h1>{currentPost.title}</h1>
<em>{currentPost.datePretty}</em>
<p dangerouslySetInnerHTML={{ __html: currentPost.content }}></p>
</>
);
私も12px
余白<p>
元素src/index.js
.今、あなたがクリックしたときあなたのポストの1つにリンクするか、手動で移動してください、あなたはこのように何かを見るべきです:
私はニュースレターを知っていましたか?📬
私が新しいブログ柱を発表するか、主要なプロジェクト発表をするとき、あなたが通知されたいならばhttps://ashleemboyer.com/newsletter .
どうぞsend me an email または任意の質問や懸念がある場合.私はあなたからの聴聞会が大好き!😊
Reference
この問題について(ビルド反応&firebaseブログサイト:パート3), 我々は、より多くの情報をここで見つけました https://dev.to/ashleemboyer/build-a-react-firebase-blog-site-part-3-4c5eテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol