從零開始製作一個ip查詢網站-第三章 透過IP取得地理位置
取得使用者 IP,ipify API,React useEffect,地理位置取得,使用者經緯度
Chris-
11 月 29,2025

從零開始製作一個ip查詢網站-第三章 透過IP取得地理位置

第二章我們成功取得使用者的 IP,但光有一串數字還做不了什麼。 這一章的任務,就是把 IP 變成「看得懂的資訊」——例如國家、城市、時區,甚至是經緯度。 有了經緯度後,我們才能進一步把位置丟到地圖上,整個功能才算真正開始有模有樣。

選擇能查詢位置的 API

既然要透過 IP 取得地理資訊,我再挑選了一個非常好用的服務: ipapi.co。它回傳的內容完整,包含:

  • 國家
  • 城市
  • 地區
  • 緯度/經度
  • 時區
  • 網路業者 ISP

查詢格式是這樣:

https://ipapi.co/你的IP/json/

回傳資料看起來像這樣:

{
    "ip": "123.123.123.123",
    "city": "Taipei",
    "region": "Taiwan",
    "country_name": "Taiwan",
    "latitude": 25.0478,
    "longitude": 121.5319,
    "timezone": "Asia/Taipei"
}

在 React 裡查詢 IP 位置資料

有了 API 後,我把第二章取到的 IP 帶進去一起查詢。 這裡我使用 useEffect 在 IP 更新後自動打 API:

import {useState,useEffect} from "react"

function App(){
    const[ip,setIp]=useState("")
    const[location,setLocation]=useState(null)

    useEffect(function(){
        fetch("https://api.ipify.org?format=json")
        .then(function(res){
            return res.json()
        })
        .then(function(data){
            setIp(data.ip)
        })
    },[])

    useEffect(function(){
        if(ip!=""){
            fetch("https://ipapi.co/"+ip+"/json/")
            .then(function(res){
                return res.json()
            })
            .then(function(data){
                setLocation(data)
            })
        }
    },[ip])

    return(
        <div>
            <div>你的IP:{ip}</div>

            {location&&(
                <div>
                    城市:{location.city}<br>
                    國家:{location.country_name}<br>
                    緯度:{location.latitude}<br>
                    經度:{location.longitude}
                </div>
            )}
        </div>
    )
}

export default App

這樣就能同時顯示:

  • 使用者的 IP
  • 所在城市
  • 國家名稱
  • 經緯度

位置資訊到這裡就算完整取得了,接下來就能把地圖加入畫面。

小結:有了經緯度,下一步把地圖放上去

第三章的進度算是整個專案最關鍵的轉折點之一。 因為有了經緯度,就能準備開始在頁面上放上地圖、標記位置,讓整個頁面不再只是文字。

下一章,會開始介紹如何把地圖嵌入 React 以及標出使用者的位置。

Tags:
IP定位React教學前端開發


相關文章
測試要測「真的會發生的那條路」
測試要測「真的會發生的那條路」
ricky - 2026-08-22T09:12:20.021686Z
驗收發文通知時只測了「草稿改發佈」,但使用者走「新建即發佈」——好測的路剛好避開了 404,提醒要測真實路徑。
別在跑著的容器裡 npm install
別在跑著的容器裡 npm install
ricky - 2026-08-22T09:12:09.966714Z
對運行中的開發容器 docker exec npm install,把具名 volume 的 node_modules 寫成半毀的教訓與正確修法。
Neon 睡著時,別讓使用者看到 500
Neon 睡著時,別讓使用者看到 500
ricky - 2026-08-22T09:10:16.630257Z
幫旅遊部落格客戶處理 Neon serverless Postgres 冷啟動 500 的退避重試:只重試暫時性連線錯誤、指數退避、驗證錯誤不重試。
訂閱電子報
隨時掌握最新的創業故事與設計開發過程
內容包含來自麒航團隊的日常分享、專業知識與工具推薦,助你了解更多創業背後的思維與技術。
麒航私房推薦
Clelereve Blog LogoClelereve Blog LogoClelereve Blog Logo
廣告區
Clelereve Blog Logo
聯絡我們
任何合作或問題請洽:
clelereve@gmail.com
Follow us
Copyright © 2025 blog.clelereve.com - All Rights Reserved
Frontend Version: -- | Backend Version: --
創業實驗筆記 - Clelereve Blog | 從零開始製作一個ip查詢網站-第三章 透過IP取得地理位置 | Clelereve Blog