Я пытался перенести 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 инициируются:
Есть ли способ предотвратить это или что я делаю неправильно, пожалуйста, дайте мне знать! Заранее спасибо.
Вы можете добавить 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,
};