0%

這篇文章會教你如何建立 repository,以及如何上傳到 github

  1. 安裝 Git

  2. 開啟終端機,進到你想建立 local repository 的資料夾,接著

    1
    git init

    這時候就會建立一個隱藏資料夾 .git/ ,我們就能在這個資料夾內使用 git 的 command line 了

  3. 接下來到 github 註冊帳號並建立 remote repository

  1. 到 repository 的首頁,點擊 code 按鈕後複製 HTTPS 網址
  1. 回到 local repo,現在我們需要把本地和遠端的 repo 連結起來

    1
    git remote add origin 剛剛的URL

    這個 origin 是我們幫 URL 取的名字,可以改成任何名稱

  2. 接下來我們可以在 local 做一些更改,例如編輯 README.md
    然後就能上傳到 remote 了

    1
    git add .

    (將這個資料夾內的變動加入到暫存區中)

    1
    git commit -m ''

    (確定變更,-m指的是提交暫存區的檔案,引號內可輸入註解,讓別人或自己知道理由或變動的檔案有哪些)

    最後,將變更 push 到 remote:

    1
    git push -u origin master

    這裡指的是要把commit過的檔案 push 到 origin 這個網址上的 master,-u是儲存設定,這樣下次你只需要

    1
    git push

    他就會幫你上傳到 origin 的 master 上了。

    至於這個 master,我們可以把 repository 視為一棵樹,這棵樹一般來說就是沿著樹幹(master)的方向增長,但到了某個時機我們可能需要他分支(branch)出來,做別的事情

    code 也是一樣的,有時候我們需要開發新的功能或版本,我們就需要 branch ,這樣在我們開發的過程中,不會去影響 master 上的開發,等到你開發到某個階段,就可以 merge,把 master 和 branch 合併起來。

    That’s it.

    如果有什麼需要更正的,歡迎聯繫我:roto93@yahoo.com.tw

最近研究如何在 react native 中使用 firebase
在幾乎不知道 firebase 是什麼的情形下學得還蠻有阻力的
網路上大部分都是用 bare react native 來做,像我這種用 Expo 的就會有點東西不一樣
現在稍微有點結果,紀錄一下

設定

  1. 首先

    1
    npm install firebase
  2. firebase官網 註冊帳號並新增專案

  3. 在 firebase console 新增應用程式

  4. 他會要你選擇應用程式的類型,我們選 web (這是因為我看的教學影片選這個,所以我不清楚如果選 ios 或 android 的話接下來要怎麼填,之後試試看)

  5. 輸入 app 暱稱後,會得到一組序號,接著回到你的 app 中建立 config.js

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // in config.js
    export const firebaseConfig = {
    apiKey: "AIzaSyAOeSc4qw2vIjTH611d9S-Wxu48ha_DHeQ",
    authDomain: "tokyo-hold-309006.firebaseapp.com",
    databaseURL: "https://tokyo-hold-309006-default-rtdb.firebaseio.com",
    projectId: "tokyo-hold-309006",
    storageBucket: "tokyo-hold-309006.appspot.com",
    messagingSenderId: "994735805040",
    appId: "1:994735805040:web:c5cae5d8b32e5928459ab5",
    measurementId: "G-M17RL2CVNS"
    };
  6. 接著我們要在 App.js 中啟用 firebase

    firebase 初始化

1
2
3
4
5
6
// in App.js
import firebase from 'firebase'
import {firebaseConfig} from './firebaseConfig'

if (firebase.apps.length == 0) { firebase.initializeApp(firebaseConfig) }
// 檢查現在有沒有其他在firebase初始化的app,不可以同時有兩個初始化

至此事前設定都完成了,接下來我們簡單演示一下用 email 做 Authentication 會用到的語法

log in 登入

首先我們要到 firebase console 去開啟 email 認證的功能:

接著用 firebase.auth().signInWithEmailAndPassword()
代入用戶輸入的信箱跟密碼,就能登入了

1
2
3
4
5
6
const auth = firebase.auth()
const onLogIn=()=>{
auth.signInWithEmailAndPassword(email, pass)
.then((result) => console.log('you\'ve logged in'))
.catch(err => alert(err))
}

完成後點擊 log in 按鈕會報錯,這是因為 DB 還沒有註冊任何 user
因此我們來新增 sign in 的功能

Sign in 註冊

用到的是 firebase.auth().creactUserWithEmailAndPassword()

1
2
3
4
5
6
const onSignIn = () => {
// TODO: Check real email
auth.createUserWithEmailAndPassword(email, pass)
.then((resule)=>{alert('sign in successfully')})
.catch(err => alert(err))
}

在點擊 sign in 按鈕後,如果沒報錯,在 firebase console 這邊就會看到有人註冊的資訊

sign out 登出

firebase.auth().signOut()

1
2
3
const onSignOut = () => {
auth.signOut()
}

接下來我們可以判斷用戶是否有登入,在登入狀態顯示登出的按鈕,如果尚未登入,就隱藏登出按鈕
因此我們建立一個 user state listener

User State Listener 登入確認

firebase.auth().onAuthStateChanged()

這個函數定義了每次用戶狀態變更的時候(如登入或登出)要做什麼,如果用戶有登入,就會傳入 user object,反之如果未登入,user 就會是 null。

記得包在 useEffect() 內,每次渲染都讓他檢查一次

實際使用起來像這樣:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const checkUser = () => {
const logInSetup = (user) => {
setUsername(user.email)
setIsLoggedIn(true)
}
const logOutSetup = () => {
setUsername('')
setIsLoggedIn(false)
}
auth.onAuthStateChanged(user => {
if (user) {
logInSetup(user)
} else {
logOutSetup()
}
})
}
useEffect(() => {
checkUser()
}, [])

delete 刪除用戶

使用 firebase.auth().currentUser.delete()

1
2
3
4
5
6
7
const onDelete = () => {
// 如果未登入 auth.currentUser 會是 null,則 null.delete() 會報錯
if (auth.currentUser)
auth.currentUser.delete()
.then((result) => { setIsLoggedIn(false), alert('User has been deleted!') })
.catch(err => { setShowReAuthModal(true), console.log(err) })
}

需注意,刪除用戶是很危險的舉動,因此你必須在不久前登入過才能夠順利刪除用戶,如果距離你上次登入已經有一段時間了,你會需要認證用戶 (Re-Authentication)

Re-Authentication 再次登入

官網沒有說明 credential 要怎麼做出來
查了一下網路,原來要用 firebase.auth.EmailAuthProvider.credential(email, password)
注意是 auth 不是 auth()

1
2
3
4
5
6
7
const onReAuth = () => {
const credential = firebase.auth.EmailAuthProvider.credential(
auth.currentUser.email,
confirmPass
);
auth.currentUser.reauthenticateWithCredential(credential).catch(err => alert(err))
}

恭喜你目前為止已經學會基本的登入了

可以到 這上面 看看我做的範例

之後我會把 facebook、google 認證方式一併整理上來。

從第二行開始縮排有個專有名詞,叫做 hanging indent,這篇文章會說明如何做到這點。

CSS 的 text-indent 屬性

這個屬性是控制文字的縮排,語法如下:

1
2
3
text-indent: [縮排距離] [縮排模式] 
如:
text-indent: 30px hanging;
  • 縮排距離: 如10px2em-30px 等等
  • 縮排模式:
    1. hanging: 反過來,除了第一行以外都會縮進去。
    2. each-line: 第一行會縮排,以及每個用<br>換行後的第一行也會縮排

不過縮排模式好像還在實驗階段,我目前還沒成功使用過,每次都沒作用XD

替代方案

如我剛剛所說,打上 hanging 不會有任何效果,但是我們還是可以硬把它做成成’看起來’有 hanging 的樣子。
只要同時設定padding-left和負的text-indent就可以了:

1
2
padding-left: 2em;
text-indent: -2em;

 

React Native 的縮排

1
<Text>{'\t'}{'\t'}Something you want to say</Text>

 

React Native 從第二行開始縮排

我還沒找到方法 XD