Маршрутизатор Nextjs.нажмите медленный переход на страницу при первом щелчке

#javascript #reactjs #next.js

Вопрос:

Я использую next/router для обработки переходов страниц.

Когда пользователь нажимает на список номеров 1-4 на странице a , я сохраняю номер, по которому он нажимает localStorage , и переупорядочиваю свой список номеров на странице b .

Например, если порядок по умолчанию на странице a

 1, 2, 3, 4
 

И пользователь нажимает 4

next/router отправьте пользователя на страницу b с измененным заказом

 4, 1, 2, 3
 

Ниже a приведен код моей страницы

 import { useState, useEffect } from 'react'
import { useRouter } from 'next/router'
import { setLocalStorage } from '../../../utils/common'
import styles from './test.module.scss'

export default function NewHome() {
  const router = useRouter()
  const numbers = [1, 2, 3, 4]
  const [order, setOrder] = useState([1, 2, 3, 4])

  const handleClick = (e): void => {
    let _order = order.filter((num) => num !== Number(e.target.id))
    setOrder([Number(e.target.id), ..._order])
    router.push('/renewal/test/b')
  }

  useEffect(() => {
    const contact = { order }
    setLocalStorage(contact)
  }, [order])

  return (
    <div className={styles.a}>
      {numbers.map((number) =>
        <p id={String(number)} key={number} onClick={handleClick}>{number}</p>
      )}
    </div>
  )
}
 

Ниже b приведен код моей страницы

 import { useState, useEffect } from 'react'
import { getLocalStorage } from '../../../utils/common'
import styles from './test.module.scss'

export default function NewHome() {
  const [items, setItems] = useState([])

  useEffect(() => {
    const _contact = getLocalStorage()
    setItems(_contact.order)
  }, [])

  return (
    <div className={styles.b}>
      {items.map((number) =>
        <p key={number}>{number}</p>
      )}
    </div>
  )
}
 

Ниже приведен мой localStorage код

 export const setLocalStorage = (contact) => {
  const _contact = getLocalStorage()
  const updateContact = {
    ..._contact,
    ...contact
  }
  window.localStorage.setItem('contact', JSON.stringify(updateContact))
}

export const getLocalStorage = () => {
  const contact = JSON.parse(window.localStorage.getItem('contact'))
  return contact
}
 

Моя проблема в том , что, когда пользователь впервые нажимает на любой номер на странице a , возникает заметная задержка в 1 секунду перед переходом страницы на страницу b .

Если я нажму кнопку «Назад», чтобы перейти на страницу a , b и снова нажму на номер, задержка исчезнет. Но если я перезагрузлю страницу a и повторю попытку, вернется задержка в 1 секунду.

Я подозреваю

 router.push('/renewal/test/b')
 

вызывает задержку. Но я не уверен, что это полностью проблема nextjs, или проблема с реакцией, или localStorage проблема.

Как я могу уменьшить задержку в 1 секунду, когда пользователь впервые переходит со страницы a на страницу b ?

Ответ №1:

Вышеуказанная проблема возникла на моем сервере локального хоста разработки. Тестирование на производстве, задержка в 1 секунду исчезла.