紀錄工作經驗、相關知識,解決技術相關問題。

Javascript, React, 工作雜談, 新手 Jamp Holes, 未分類, 網站相關

[前端筆記] next.js URL 更新不刷新網頁

這陣子工作專案使用next.js,剛好遇到個常會用到的功能,所以隨手紀錄一下。

next.js中要對 url 進行修改,我們通常會使用next提供的 Router 進行設定:

import React, { useEffect} from 'react'

// 使用 next.js 中的 Router 
import { useRouter } from 'next/router'

const Example = () => {
  const router = useRouter()

  useEffect(() => {
    router.push(
      { 
        pathname: '/path',  // 要去的網頁
        query: {}  // GET object
      },
    )
  },[])
}

但某些情境下,我們會需要依據用戶操作,對 URL 中 GET 參數進行增減 or 修改,但又不讓網頁進行重新渲染/刷新,在 next.js 中可以這樣設定:

import React, { useEffect} from 'react'

// 使用 next.js 中的 Router 
import { useRouter } from 'next/router'

const Example = () => {
  const router = useRouter()

  useEffect(() => {
    const query = router.query

    /* 此處撰寫 GET object 處理
       EX: 
       query = {
         type: 'aaa',
         key: 'bbb'
       }

       // Add GET a
       query.a= '1'

       // Change GET type
       query.type = 't'

       Delete GET key
       delete query.key
    */

    router.push(
      {
        pathname: '/path', // 網頁
        query: { ...query }  // GET 參數
      },
      undefined, { shallow: true }
    )
  },[])
}

在 router 中設定加上 undefined, shallow: true 就可以實現更新 URL的同時,不對頁面進行重新渲染/刷新,有需要的可以直接copy底下code。

router.push(
  {
    pathname: '/path', // 網頁
    query: { ...query }  // GET 參數
  },
  undefined, { shallow: true }
)

發表迴響