Ответы пользователя по тегу Next.js
  • Next JS что за ошибка?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Build error occurred
    Error: Page "/client/[clientId]" is missing "generateStaticParams()" so it cannot be used with "output: export" config.

    Предположительно, Вы пытаетесь выполнить статическую генерацию на нексте, при этом у Вас имеется страница с динамическим маршрутом (/client/[clientId]). Для динамических маршрутов необходимо использовать функцию getStaticPaths().

    Базовый пример:
    // /pages/client/[clientId].js
    
    export async function getStaticPaths() {
      const clientIds = await fetchClientIdsFromDatabase(); 
    
      return {
        paths: clientIds.map(clientId => ({params: {clientId: clientId}})),
        fallback: false,
      };
    }

    // next.config.js
    
    export default {
        output: 'export',
    }
    
    // или
    
    module.exports = {
      output: 'export',
    }
    Ответ написан
    Комментировать
  • Как обновить верстку на NEXT.JS c Wordpress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Надо смотреть конкретный конфиг некста, но предположу, что никак. Скорее всего, фронт живет отдельной жизнью, используя api wp.
    в файловом менеджере на vps, где файлы самого next я нашел скрипт, который надо поменять, поменял его

    Так нельзя делать, т.к. это итоговая компиляция проекта. Вам необходимо вносить изменения в исходники некст проекта, затем билдить и экспортировать (если старый проект) проект как статику.
    Ответ написан
    7 комментариев
  • Как в next js добавить класс к элементу?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как в обычном реакте:
    const Icon = ({title, href, active}) => {
        const className = active ? 'active' : '';
    
        return (
            <Link href={href} className={`svgh m-auto ${className}`}>
                {/* svg */}
            </Link>
        );
    }

    'use client'
    import React, {useState, useEffect} from 'react';
    import Icon from './icons/Icon';
    
    const links = [
        {href: '#home_anchor', svgIcon: 'home'},
        {href: '#user_anchor', svgIcon: 'user'}
        // others
    ];
    
    const Navbar = () => {
        const [activeLink, setActiveLink] = useState('');
    
        useEffect(() => {
            const handleScroll = () => {
                // logic scroll
            }
    
            // add anchor
            window.addEventListener('scroll', handleScroll);
    
            // remove anchor from unmount
            return () => window.removeEventListener('scroll', handleScroll)
    
        }, []);
    
        return (
            <nav className="flex flex-col fixed bg-gray-800 align-center">
                {links.map((l) => (
                    <Icon href={l.href} key={l.svgIcon} title={l.svgIcon} active={activeLink === l.href}/>
                ))}
            </nav>
        );
    }
    Ответ написан
    1 комментарий
  • Стотит ли менять asp.net mvc на asp.net web api + nextjs?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    В первую очереди улучшить UI за счёт React библиотек

    Mantine как свежий воздух, после монстров в виде and и material.
    Но в общем, я не хочу тратить время на написание сервера на каком-то NodeJS и т.д.

    Нода не лучший вариант вложения своего времени, если же Вы уже не работаете с ней.

    В остальном, согласен с теми, кто сомневается. Давайте точнее, сколько денег Вы заработаете/сэкономите при всем это переписывание? Если нисколько или мало, то предлагаю - расстрелять преждевременных оптимизаторов.
    Ответ написан
    6 комментариев
  • Как можно обновить head в next.js?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Я бы использовал существующий компонент Head, вместе с контекстом и состоянием, а так же кастомный HeadProvider:
    // _app.js
    import {HeadProvider} from './HeadProvider';
    
    function App({Component, pageProps}) {
        return (
            <HeadProvider>
                <Component {...pageProps} />
            </HeadProvider>
        );
    }

    // HeadProvider.js
    import React, {createContext, useContext, useState} from 'react';
    
    const HeadContext = createContext();
    export const useHead = () => useContext(HeadContext);
    
    export function HeadProvider({children}) {
        const [headData, setHeadData] = useState({
            title: 'Init title',
            description: 'Init description',
            keywords: 'Init keywords'
        });
    
        return (
            <HeadContext.Provider value={{headData, setHeadData}}>
                {children}
            </HeadContext.Provider>
        );
    }

    // MyBestHead.js
    import Head from 'next/head';
    import {useHead} from './HeadProvider';
    
    export function MyBestHead() {
        const {headData} = useHead();
    
        return (
            <Head>
                <title>{headData.title}</title>
                <meta name="description" content={headData.description}/>
                {/* more head items */}
            </Head>
        );
    }

    // MyComponent.js
    import React, {useCallback} from 'react';
    import {useHead} from './HeadProvider';
    
    export function MyComponent() {
        const {setHeadData} = useHead();
    
        const handleClick = useCallback(() => {
            setHeadData({
                title: 'New title',
                description: 'New description',
                keywords: 'New keywords'
            });
        }, [setHeadData]);
    
        return (
            <button onClick={handleClick}>Update Head Data</button>
        );
    }
    Ответ написан
    1 комментарий
  • Как работают SSR компоненты?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я правильно понимаю работу Next.js: компоненты без состояния рендерятся на сервере и могут индексироваться поисковыми роботами

    Верно, индексация стандартная.
    А с состоянием - на стороне клиента, и роботы их не видят.

    Не совсем. Поисковики индексируют динамику, но ограниченно, и она проиграет классической статике или ssr. То, что Вы видите динамику в топе - это не заслуга динамики, а недоработка конкурентов со статикой.
    Однако в компоненте самой страницы ArticlePage у меня в любом случае будет использование useState. Значит ли это, что вся страница будет отрисовываться на клиенте?

    Не совсем. Часть страницы будет отрисована на сервере, а часть на клиенте.
    И что поисковые роботы обойдут контент страницы стороной?

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

    К нексту у многих имеются вопросы, поэтому Вы не первый и уж тем более, не последний :)
    Ответ написан
    Комментировать
  • Деплой next.js приложения на regru?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Для SSR:
    1. Собрать docker image со своим приложением.
    2. По ssh залить п1 на сервер.
    3. По ssh установить docker и выполнить установку п2.
    4. По ssh установить и настроить nginx.
    5. По ssh настроить iptables (или аналог).
    6. (опционально) По ssh настроить автозапуск контейнера с приложением и nginx, при падение сервера.

    Для слабого vds (1 ядро, <2gb ram) использую Arch (без gui), для всех остальных - Ubuntu.

    Если у Вас SSG, то отдельный сервер не нужен, т.к. Вы можете на обычный shared хостинг залить эту статику, как обычный html сайт.
    Ответ написан
    Комментировать
  • Как вывести картинки?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    в папке images в папке проекта

    А папка images в яйце, а яйцо в другой папке. Предположу, что речь идет про папку images, которая находится в корне проекта, тогда обычно указывается относительный путь:
    <img src="/images/img.jpg" alt="" width="100px" height="100px"/>
    
    // or
    
    import Image from 'next/image';
    <Image src="/images/img.jpg" alt="" width={100} height={100}/>
    Ответ написан
  • Не могу определиться с пайплайном, как разобраться?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Изучил основы JavaScript, понял что всякие манипуляции DOM мне не нужны, потому что это не используется больше

    Где и кем больше не используется?
    Думаю такой, может мне надо выучить React?

    Но есть почему-то ощущение что React в чистом виде мне не нужен, чтобы пользоваться Next.js.

    NextJS: The React Framework for the Web...
    А в "грязном" виде React какой?
    Я остановился и понял что я занимаюсь какой-то фигней. Что я хватаю отовсюду понемногу знаний, но они не складываются в общую картинку.

    Собственно вопрос: по какому пути лучше пойти, чтобы потихоньку прийти к желаемому?

    Все так и есть. Вам необходимо изучать JS в следующем порядке:
    1. Vanilla JS.
    2. React.
    3. Frontend React + NextJS.
    4. Fullstack React + NextJS (+NestJS?).
    При этом чтобы не потратить время впустую на изучения вещей, которые абсолютно не нужны.

    А вот здесь интересный момент. Видите ли, исходя из количества вакансий, NodeJS и все ее производные в качестве backend фреймворков - не сильно востребованы, относительно более специализированных backend языков/фреймворков. Если у Вас нет особой страсти к NodeJS, то рекомендую сфокусироваться лишь на frontend (учитывая, Ваш контекст), а затем (если будет возможность) - учить в дополнение к frontend более специализированные backend языки/фреймворки.
    Ответ написан
    2 комментария
  • Next JS это только про SSR или на нём приложение ничем не отличается от реакта?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Next JS это только про SSR

    Это про любой тип веб-приложения:
    - SSR.
    - SSG.
    - ISR.

    Ну а еще, это фактически единственный инструмент, который может все и сразу под React.

    Next JS это тот же реакт в котором сразу есть все необходимые пакеты для работы с ним или он все же медленней обычного spa приложения на реакте с пакетами?

    - Все инструменты в наличие.
    - Next может экспортировать собранное React приложение, после чего - некста там уже не будет, а статика, маршрутизация и реактивность останется. Что быстрее статики?
    что в нексте реакт всегда обращается к своему серверу для SSR

    Как настроите, так и будет работать. Можно всегда, можно иногда, можно никогда.
    а у обычного реакта мы фетчем просто запросы шлем, когда все spa приложение очень быстро работает без лишних запросов на сервер

    На Next тоже самое можно. А Ваш SPA в SEO может? А рендерить одни страницы без SEO, вторые ПРЕрендерить с SEO, а остальные и так и так на лету может? А единовременно в рамках одного приложения? А еще и без дополнительных библиотек? А еще с конским комьюнити в рамках одного инструмента?

    Еще начинают активно внедряться Server Components, которые по некоторым отзывам - могут стать отраслевым стандартом.

    Если Вас интересует лишь SPA без SEO и дополнительных опций рендеринг, который будет рендериться лишь на клиенте, то оптимальнее будет выбрать лишь React + Роутер + WebPack в качестве сборщика.

    Vercel

    Vercel, оплата интеграции по стандартному тарифу, ну Вы знаете ;)
    Ответ написан
    1 комментарий
  • Можно ли с next.js static export отправить данные формы?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    А причём здесь next и в чем проблема отправить данные используя fetch?

    Отправляйте данные как с обычной html страницы, другой вопрос - как Вы преодолеете cors, если таковой имеется.
    Ответ написан
    Комментировать
  • Как оптимизировать проект Next.js?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Делаю форму регистрации на Next.js, 4 страницы. Хочу ускорить загрузку страниц, но не понимаю, какой рендеринг для этого использовать

    Здесь необходимо уточнение, что понимается под "ускорить загрузку", если Вы имеете ввиде именно сборка страницы, то выбирайте пре-рендеринг. Выбирать между SSR и ISR (необходимо страницу заранее сбилдить, либо использовать кеш), SSG (тут итак билд страницы идет заранее, если fallback не равен true).

    SSR
    ISR
    SSG
    Ответ написан
    Комментировать
  • Стоит ли новичку учить next 12 или лучше сразу 13?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Стоит ли новичку учить next 12 или лучше сразу 13?

    Сразу учите 13, затем, при необходимости - дополняйте знания от <=12 версии.
    Слышал что в 13 версии полностью поменяли все концепции

    Позже снова все поменяют, традициям нельзя изменять!
    Ответ написан
    Комментировать
  • Как глобально подключить переменные _breakpoints и использовать их в проекте NEXT?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    breakpoints.scss:
    $breakpoint_sm: 300px;
    $breakpoint_md: 700px;
    $breakpoint_xl: 1000px;

    BestComponent.scss:
    @import "breakpoints";
    
    @media screen and (max-width: $breakpoint_md) {
      // ...
    }

    index.scss:
    @import "fonts";
    @import "breakpoints";

    _app.tsx:
    import { FC } from "react";
    import { AppProps } from "next/app";
    import "./styles/index.scss";
    
    const App: FC<AppProps> = ({ Component, pageProps }) => (
      <Component {...pageProps} />
    );
    
    export default App;

    Если Вы пишите "реактивные" приложения, то я бы рекомендовал уходить от классического css/scss к css-in-js, например используя emotion.js.

    Но тут видите, мы все равно подключаем
    Dmitrijs Balcers "breakpoints"; в BestComponent, а надо без импорта, сразу

    В случае с SCSS переменными, они не могут быть доступны глобально без импорта, как это возможно с CSS переменными, которые определены в :root. Это ограничение SCSS и его способа компиляции в CSS.

    Варианты:
    - Использовать переменные :root:
    :root {
      --breakpoint-sm: 300px;
      --breakpoint-md: 700px;
      --breakpoint-xl: 1000px;
    }

    @media screen and (max-width: var(--breakpoint-md)) {}

    - Использовать sass-loader в webpack для автоматического импорта переменных в каждый файл:
    {
      test: /\.scss$/,
      use: [
        "style-loader",
        "css-loader",
        {
          loader: "sass-loader",
          options: {
            additionalData: `@import "path/breakpoints.scss";`
          }
        }
      ]
    }

    - Использовать css-in-js и не изобретать велосипеды.
    Ответ написан
    4 комментария
  • Как получить данные из get параметров и подставить их в запрос getStaticProps?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Если параметры динамически изменяются в зависимости от действий пользователя с интерфейсом (фильтры, пагинация итп.), статическая генерация не лучший вариант. В таком случае, лучше использовать хуки useState и useEffect для хранения и изменения get параметров, и последующего выполнения запроса к API.

    Но если прям невтерпеж, то, как вариант:
    export const getServerSideProps = async (context) => {
      const page = context.query.page || 1;
      
      try {
        const res = await axios.get(`tracks?page=${page}`);
        return {
          props: {
            tracks: res.data.items,
          },
        }
      } catch (e) {
        return {
          notFound: true,
        }
      }
    }
    
    export const getStaticProps = async (context) => {
      const page = context.params.page;
      // code
    }
    Ответ написан
    Комментировать
  • Как отобразить preloader при загрузки страницы NextJS?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    https://stackoverflow.com/questions/68118383/next-... ?
    Для динамических маршрутов можно использовать fallback https://nextjs.org/docs/pages/building-your-applic...
    Ответ написан
  • Зачем next js нужен еще дополнительный сервер для задач на бэке?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Зачем вообще нексту еще другой сервер, если некст и так всё может делать сам?

    Сильное заявление. Next это в первую очередь - генератор сайтов, SSR, SSG итп, а вот Nest это целый комбаин бэкенда для JS:

    - Подключение и работа с базами данных: Nest.js может использовать различные ORM, такие как TypeORM, Sequelize или Mongoose, для работы с базами данных.
    - Создание RESTful API: В то время как Next.js предоставляет базовые возможности для создания API, Nest.js имеет более широкие возможности для создания сложных RESTful API.
    - Аутентификация и авторизация: Nest.js предоставляет поддержку для создания сложных систем аутентификации и авторизации.
    - Обработка ошибок: Nest.js предоставляет встроенные механизмы для обработки ошибок.
    - Валидация входных данных: С помощью библиотек, таких как class-validator, Nest.js может проверять входные данные на соответствие определенным правилам и структурам.
    - Middleware: Nest.js предоставляет встроенные механизмы для использования middleware, что позволяет производить предварительную обработку запросов.
    - Загрузка файлов: Nest.js может управлять загрузкой файлов и данных multipart/form-data.
    - Websockets и microservices: Nest.js имеет встроенные возможности для работы с веб-сокетами и микросервисами.
    - Dependency Injection: Nest.js имеет собственную систему внедрения зависимостей, основанную на TypeScript, что облегчает тестирование и повышает модульность кода.
    - CRON jobs и задачи в фоне: Nest.js позволяет легко создавать фоновые задачи и запускать задачи по расписанию.

    Почитать: https://habr.com/ru/articles/570886/
    Ответ написан
    Комментировать