Categories: javascript

[JS] ReactJS + FireBase 簡易即時聊天室

ReactJS 由 Facebook 推出的前端 Library
記錄一下利用 ReactJS 和 FireBase (Baas) 練習的簡易即時聊天室
使用 ReactJS + FireBase + Github 結合而成完全, 零成本即時聊天室
ReactJS 繪製畫面, FireBase 提供 即時資料庫, Github 提供線上空間

 

 

先簡單說明各個服務, 和你最好會使用的技術…
技術方面…
很多 GIT
一些 HTML, Javascript
CSS 可有可無
nodejs, npm 等, 為了使用 ReactJS 請務必會安裝,
(如果是純 Javascript + jQuery 就可以不需使用 nodejs)

 

 

 

ReactJS


Facebook 出品的 Javascript Library
主要用於使用者介面 (UI, User Interfaces) 的繪製
利用 虛擬物件 (Virtual DOM) 的方式, 讓網頁畫面的呈現更有效率, 速度更快

更成為目前 前端工程師(F2E) 最火紅的必學技術之一

 

 

 

FireBase


BaaS, Backend as a Service 提供商, 剛被 Google 收購
能讓一般開發者簡單使用一些後端功能與服務, 即時資料庫(Realtime Database), 使用者登入/管理 等…
類似這樣的服務, 最近不少. 而 FireBase 的免費方案, 足夠拿來做一些小練習

免費方案的功能(2015-11-15) :
https://www.firebase.com/pricing.html

  • 同時 100 個連線
  • 1 GB 儲存量
  • 10 GB 流量限制

 

 

 

Github


程式碼寄存、版本控管服務
git 工程師必學、必用的技術

Github 提供免費的方式讓開發者把作品, 程式, 用公開的方式存放在雲端
除了 git 基本的功能外, Github 還提供顯示靜態網頁的功能

 

 

 

簡易即時聊天室

 

目錄結構 :
index.html : 主要頁面容器, 載入 react lib, css lib 等…
package.json : npm 套件安裝檔, 說明使用哪些套件. e.g. firebase 套件等…
build 目錄 : js 轉換完成的 jsx 碼
src 目錄 : 原生 js 碼


(整個專案很小、很單純)

 

ReactJS 的部份

ReactJS 會執行 jsx (Javascript 中使用的 XML 語法) 而不是原生 js
這部份也算是 react 速度快的原因之一, 詳細原理先不提…

首先, 寫的時候還是寫 js, 但是 react 讀取使用的是 jsx
所以需要把 js 碼轉為 jsx 碼

官網內的example code

(react 的格式, js 碼)


(轉換為 jsx 後)

從上面兩張圖看來, 其實沒有太大不同, 不過為了方便開發,
我自已還是寫 js 碼.

(官網教學 : https://facebook.github.io/react/docs/tutorial.html)

 

如何把 JS 轉 JSX

兩種方式 : 線上與線下

線上的方式 :
當使用者打開頁面時, 即時將 js 轉為 jsx
優點 : 開發者比較方便
缺點 : 使用者打啟畫面花費時間較久, 也失去 react  的意義
使用方式 :
在 html 頁面, 戴入 reactjs 兩個 lib 之後加入

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>

 

 

線下的方式 :
開發時利用 babel 工具預先將 js 轉為 jsx, 這個方式需要有 npm, 也就是需要 nodejs(註1) 的幫助

已經有 npm 的情況下, 利用 npm 安裝下列兩個套件

npm install –global babel-cli
npm install babel-preset-react

(透過 npm 全域安裝, 兩個 react 會使用到的套件)

安裝完成之後, 在其 react 專案根目錄下, 執行

babel –presets react src –watch –out-dir build

執行 babel 監控轉換 js 為 jsx, 他會常註在 cli 畫面上, 然後監控 src 資料夾下所有 .js 檔,
將轉換成功的 jsx 檔放到 build 資料夾下

 

轉換畫面大概像這樣, 每一次 .js 檔儲存變動時, 會自動轉換為 jsx 格式

src/myreace.js -> build/myreact.js

當有錯誤時, 也會出現提示

 

src/myreact.js 的程式主體, 大都是由 官方 example 來的
https://github.com/facebook/react/wiki/Examples

 

 

FireBase

新建一個 APP 之後, 就可以直接使用了.
FireBase 提供多種 lib 供使用, 這官網查詢可以使用的 lib ( https://www.firebase.com/docs/web/libraries/ )
 這次要用 ReactJS 所以直接選用 ReactFire lib.

 

在 html 頁面中戴入, firebase client lib

<script src="https://cdn.firebase.com/js/client/2.3.2/firebase.js"></script>

 

在 cli 下執行 npm install

npm 會讀取 package.json, 並安裝所需套件.
安裝完後, 專案目錄下會多一個 node_modules 資料夾.
接著在 index.html 再戴入 reacefire.js

<script src="node_modules/reactfire/dist/reactfire.js"></script>

 

 

記得到 FireBase 管理頁去建立一個APP, 預設的設定就可以直接使用了
你的 APP 名稱會成為 服務的 url

例如:https://[你的 APP 名稱].firebaseio.com/

 

 

Github

利用 github 建立頁面.

官網的說明 : https://help.github.com/articles/creating-pages-with-the-automatic-generator/

依說明, 執行完 automatic page generator 之後
會建立出一個 branch 叫 gh-pages
裡面預設就會有一些基本頁面 html, css

 

把 automatic page generator 的內容蓋掉.
依需求把 branch 上的內容改掉

在 gh-pages branch 多了一個 node_modules 的資料夾, 正常來說這個資料夾是不該被收錄至 git 的.
( npm 的套件資料夾 )

此時, http://cscolabear.github.io/reactjs_firebase_message/ 就可以看到內容了

 

 

 

後記:

利用 FireBase 和 Github, 完成 資料庫 和 Web Server 的服務
配合 ReactJS 完成即時聊天室的畫面

過程跳的比較快, 如果對部份技術沒概念的話, 有點難懂… Q.Q

ReactJS 的語法, 可以多看 Github 裡的 SourceCode

 

 


 

 

 

註1

nodejs

讓前端語言 javascript, 也可以在 後端 提供服務.
目前也被大量運用在開發時的小工具.

安裝 nodejs 與 npm 過程大概為

nvm -> nodejs -> npm

nvm (node version manager) 為 nodejs 的版本管理工具, 可以透過 nvm, 快速安裝各個版本的 nodejs.
npm (node package manager) 為 nodejs 套件管理工具, 可以透過 npm, 快速安裝各種工具, 早期 npm 需要另外安裝, 現在已經被包含在 nodejs 裡
官方教學 : https://github.com/creationix/nvm

可樂

View Comments

Recent Posts

plain PHP 搭配 Slack 進行錯誤追蹤、回報(Error Tracking、Error Handling)

錯誤追蹤、回報非常重要,看到的錯誤才知道怎麼修。現今 PHP 流行的 Laravel 有很好的 Error Tracking, Error Handling。但 plain PHP 怎麼辦呢? 在 production 為了安全考量會設定…

4 years ago

Drone CI/CD 配合 Github 使用 Rsync 進行 Deploy

jenkins、circleci、travis 或 Gitlab CI 皆為目前暫知名的 CI/CD 服務,各自缺點也不言而喻...過於肥大、收費略高(?)、速度不夠快執問題...此時使用 go language 開發的 Drone 就出現啦,完全 docker 容器化的運行方式讓整個 CI…

4 years ago

Nginx brotli 設定

網頁壓縮技術中 gzip 很好用,deflate 己經過時,但你聽過 brotli 嗎? 有著比 gzip 更好、更快的壓縮效率。看起來利大於弊有什麼不用他的理由嗎?簡單從優、缺點來看 brotli!到底 brotli 布羅特利是什麼、如何設定呢。 目前大多的 web server…

4 years ago

本機使用 Docker 容器內 PHP (wrapper/expose PHP)

為什麼要讓本機使用 Docker 內 PHP? 情境... docker 容器內用的是 PHP 7.4 但你的開發本機還在跑 PHP 5.6 或是更舊,因為 dockerize 的關係會將所有相關環境都轉移到…

4 years ago

為什麼你需要密碼管理工具

為什麼你需要密碼管理工具現代人一天下來需要輸入多少組密碼,工作與生活己經和密碼密不可分! 除了足夠全安的密碼,密碼記錄、儲存的方式又足夠安全嗎?密碼管理工具可以帶來什麼幫助呢? 為什麼你需要密碼管理工具 資安問題!!大多人說著沒做壞事不怕被偷資料、監聽。嚴重曝露出現代人的基本科技素養的低落和無知 🤯 密碼的使用無所不在!! 行動裝置的普及,APP 、手機遊戲、銀行帳戶所有和生活相關的東西都需要密碼!!facebook, line 只要打開 APP 也會輸入密碼只是他是自動輸入、一般情況不可視 (auth token) 一般人最常發生的密碼資安問題…

4 years ago

簡單使用 Mysql Partition 優化查詢

mysql 資料表分區 mysql table partition 從架構上調整 mysql 的查詢效率。mysql DB 的優化可以簡單也能複雜,除了調整設定值。也可以透過水平分割(Horizontal Partitioning)、垂直分割(Vertical Partitioning) 分庫或分表將資料分散儲存減少資料搜尋、group by 時的效能消耗。拆開批次處理,理論上效率都會變好,本文就水平分割的…

4 years ago