Ошибка Nextjs при предварительном рендеринге страницы "/"

Я получаю эту ошибку:

Вы импортируете компонент, которому требуется useState. Он работает только в клиентском компоненте, но ни один из его родителей не помечен как «использовать клиент», поэтому по умолчанию они являются серверными компонентами.

./src/app/page.js
Attempted import error: 'Navbar' is not exported from './components/navbar' (imported as 'Navbar').

Import trace for requested module:
./src/app/page.js

./src/app/page.js
Attempted import error: 'Navbar' is not exported from './components/navbar' (imported as 'Navbar').

Import trace for requested module:
./src/app/page.js

info  - Linting and checking validity of types
info  - Collecting page data
info  - Creating an optimized production build ...SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at U (C:\Users\jasmi\OneDrive\Desktop\BoxingApp\boxingtrainer\node_modules\next\dist\compiled\react-server-dom-webpack\cjs\react-server-dom-webpack-client.edge.production.min.js:22:53)
    at c (C:\Users\jasmi\OneDrive\Desktop\BoxingApp\boxingtrainer\node_modules\next\dist\compiled\react-server-dom-webpack\cjs\react-server-dom-webpack-client.edge.production.min.js:24:307)

Error occurred prerendering page "/". Read more: https://nextjs.org/docs/messages/prerender-error
SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at U (C:\Users\jasmi\OneDrive\Desktop\BoxingApp\boxingtrainer\node_modules\next\dist\compiled\react-server-dom-webpack\cjs\react-server-dom-webpack-client.edge.production.min.js:22:53)
    at c (C:\Users\jasmi\OneDrive\Desktop\BoxingApp\boxingtrainer\node_modules\next\dist\compiled\react-server-dom-webpack\cjs\react-server-dom-webpack-client.edge.production.min.js:24:307)
info  - Generating static pages (5/5)

> Export encountered errors on following paths:
        /page: /

Это происходит, когда я пытаюсь запустить команду npm run build в приложении nextjs, которое только начал создавать. Это код, который у меня есть в page.js:

import Image from 'next/image'
import { Inter } from 'next/font/google'
import styles from './page.module.css'
import { Navbar } from './components/navbar'

const inter = Inter({ subsets: ['latin'] })

export default function Home() {
  return (
    <main className = {styles.main}>
      <Navbar/>
    </main>
  )
}

И в навбаре:

"use client";

import React, { useState } from 'react';

export default function Navbar() {
  const [showNav, setShowNav] = useState(false);
  const [loggedIn, setLoggedIn] = useState(false);

  return (
    <nav
      className = "fixed top-0 left-0 w-full h-10 bg-gray-100 border-b border-gray-300"
      onMouseEnter = {() => setShowNav(true)}
      onMouseLeave = {() => setShowNav(false)}
    >
      <div className = "flex items-center h-full">
        <div className = "ml-4 font-bold">Boxing Trainer</div>
        {loggedIn && (
          <div className = "flex items-center justify-center flex-1">
            <div className = "w-6 h-6 mr-2 bg-gray-300 rounded-full"></div>
          </div>
        )}
        <div className = "flex items-center justify-end flex-1">
          {!loggedIn && (
            <>
              <button className = "px-4 py-2 mr-4 text-sm font-medium text-gray-500 border border-blue-500 rounded-lg hover:bg-blue-500 hover:text-white focus:outline-none focus:ring focus:ring-blue-500 focus:ring-opacity-50">
                Login
              </button>
              <button className = "px-4 py-2 mr-4 text-sm font-medium text-gray-500 border border-blue-500 rounded-lg hover:bg-blue-500 hover:text-white focus:outline-none focus:ring focus:ring-blue-500 focus:ring-opacity-50">
                Signup
              </button>
            </>
          )}
          {loggedIn && (
            <button className = "px-4 py-2 mr-4 text-sm font-medium text-gray-500 border border-blue-500 rounded-lg hover:bg-blue-500 hover:text-white focus:outline-none focus:ring focus:ring-blue-500 focus:ring-opacity-50">
              Logout
            </button>
          )}
        </div>
      </div>
    </nav>
  );
};
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
199
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы не экспортируете компонент в Navbar, а только декларируете его.

// Add this to the bottom of the file.
export {Navbar};

Я обновляю свой вопрос, чтобы отразить, что попробовал это решение. Я все еще получаю ту же ошибку

Emm 17.04.2023 19:27

@Emm Эмм, я не видел вашу страницу page.js, поэтому я не знал, что вы на самом деле используете именованный импорт. Либо вам нужно импортировать его, используя импорт по умолчанию, либо вы можете экспортировать его, используя именованный импорт. Я обновлю свой ответ.

eten 17.04.2023 19:30

@Emm tl;dr, просто удалите значение по умолчанию после экспорта в навигационной панели

eten 17.04.2023 19:32

Извините, я переписал свой ответ, потому что ошибся, но удаление export default и просто добавление кода в мой ответ должно работать.

eten 17.04.2023 19:35

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