Next.js 11 — вызов API Axios срабатывает 2 раза при загрузке страницы

Я пытался перенести CRA React.js в приложение Next.js SSR, я перешел специально на Next.js 11, так как у меня есть некоторые пакеты, которые поддерживают только Next.js 11, поскольку мое приложение CRA работает отлично, но когда я переместил все файлы проекта в Next.js 11, все мои вызовы API запускаются 2 раза, когда я посещаю страницу, я использую реакцию 16 и axios для получения данных из моего бэкэнда, пожалуйста, помогите мне решить эту проблему:

Вот пример кода:

в страницах/test/index.js

"use client"

import React from 'react';
import Test from '../../src/components/test';

const Asdf = () => {
    return ( 
        <Test />
     );
}
 
export default Asdf;

вот компонент:

"use client"

import Axios from 'axios';
import React, { useEffect, useState } from 'react';

const Test = () => {

    const [data, setData] = useState([])

    useEffect(() => {
        Axios.get('https://dummyjson.com/products/')
        .then(res => setData(res))
    }, [])

    return ( 
        <>
           test page
        </>
     );
}

export default Test;

На вкладке «Сеть» вы можете заметить 4 запроса, 2 — предполетные и еще 2 инициируются:

Есть ли способ предотвратить это или что я делаю неправильно, пожалуйста, дайте мне знать! Заранее спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
107
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете добавить actStrictMode: false в next.config.js.

const nextConfig = {
  reactStrictMode: false,
};

После добавления не забудьте перезапустить проект.

Здесь у вас есть больше информации!

https://nextjs.org/docs/pages/api-reference/next-config-js/reactStrictMode

Ответ принят как подходящий

Если вы используете React 18 или более позднюю версию, это потому, что React вводит строгий режим. По сути, это функция, которая помогает вам находить ошибки в среде разработки и не влияет на производственную среду. Вот примечание из документации React :

Строгий режим позволяет выполнять следующие проверки в процессе разработки:

  • Ваши компоненты будут повторно визуализировать дополнительное время, чтобы найти ошибки, вызванные нечистым рендерингом.
  • Ваши компоненты будут повторно запускать эффекты еще раз, чтобы найти ошибки, вызванные отсутствием очистки эффектов.
  • Ваши компоненты будут проверены на использование устаревших API.
  • Все эти проверки предназначены только для разработки и не влияют на производственную сборку.

Если вы хотите избежать такого поведения, просто перейдите к файлу next.config и измените reactStrictMode на false:

const nextConfig = {
  reactStrictMode: false,
};

Другие вопросы по теме