• Как на Next Js на серверных компонентах получать данные?

    grantur5707
    @grantur5707
    GNG999, https://nextjs.org/docs/app/building-your-applicat...

    Нельзя использовать асинхронные компоненты для клиентской стороны - они работают исключительно как Server Components. Об этом написано в документации.

    Если компонент должен быть серверным и асинхронным, не указывайте 'use client' в начале файла, и просто оставляйте его как серверный:

    export default async function MainPage() {
      const data = await getData();
      return (
        <div className={cn('main-page')}>
          <div className={cn('title-section')}>
            <div className={cn('title')}>
              <p>Уникальные изделия кубачинских мастеров</p>
            </div>
          </div>
          {/* другие части страницы */}
        </div>
      );
    }


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

    'use client';
    
    import { useState, useEffect } from 'react';
    
    export default function MainPage() {
      const [data, setData] = useState(null);
    
      useEffect(() => {
        async function fetchData() {
          const result = await getData();
          setData(result);
        }
        fetchData();
      }, []);
    
      if (!data) {
        return <div>Loading...</div>;
      }
    
      return (
        <div className={cn('main-page')}>
          <div className={cn('title-section')}>
            <div className={cn('title')}>
              <p>Уникальные изделия кубачинских мастеров</p>
            </div>
          </div>
          {/* другие части страницы */}
        </div>
      );
    }
    Написано
  • Как на Next Js на серверных компонентах получать данные?

    grantur5707
    @grantur5707
    GNG999, а какая у вас версия next? попробуйте другое решение:

    import classNames from "classnames/bind";
    import style from './style.module.scss';
    import Image from "next/image";
    import ProductItem from "@/components/product-item";
    import Link from "next/link";
    import { use } from 'react';
    
    const cn = classNames.bind(style);
    
    const getData = async () => {
        const response = await fetch("http://localhost:9000/api/cart/qty");
        if (!response.ok) {
            throw new Error("Failed to fetch data");
        }
        return await response.json();
    };
    
    export default function MainPage() {
        const data = use(getData());
    
        return (
            <div className={cn('main-page')}>
                <div className={cn('title-section')}>
                    <div className={cn('title')}>
                        <p>
                            Уникальные изделия кубачинских мастеров
                        </p>
                        {/* Используем полученные данные */}
                        <p>{data.qty}</p>
                    </div>
                </div>
                <div className={cn('features')}>
                    <div className={cn('item')}>
                        <Image src={'/heart.png'} alt={'индивидуальный подход'} width={50} height={50} />
                        <span>Индивидуальный подход</span>
                    </div>
                    <div className={cn('item')}>
                        <Image src={'/hot-air-balloon.png'} alt={'индивидуальный подход'} width={50} height={50} />
                        <span>Доставка по всей России</span>
                    </div>
                    <div className={cn('item')}>
                        <Image src={'/diamond-ring.png'} alt={'индивидуальный подход'} width={50} height={50} />
                        <span>300+ изделий</span>
                    </div>
                    <div className={cn('item')}>
                        <Image src={'/shopping-store.png'} alt={'индивидуальный подход'} width={50} height={50} />
                        <span>Наш магазин открыт с 2003 года</span>
                    </div>
                </div>
                <div className={cn('products-catalog')}>
                    {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].map((el) => (
                        <Link className={cn('product-item-link')} href={`/jewellery-catalog/${el}`} key={el}>
                            <ProductItem />
                        </Link>
                    ))}
                </div>
            </div>
        );
    }
    Написано
  • Как повторить транзакцию с помощью Sui SDK?

    grantur5707
    @grantur5707
    Александр, https://docs.sui.io/references/cli/client
    Тут написано какие аргументы нужно задавать для той или иной команды и за что отвечает каждый.
    Касаемо первой части вы всё правильно поняли, идентификатор из аргумента --gas получается командой sui client gas, а --coin-id - это id объекта монеты, получаемый командой sui client objects.

    Корректный пример второй команды выглядит так:

    sui client call --package 0xfa9302fe83a1b717293ca0d4f80a9195e66ac3d401977df5b16f1aae00232ab9 ^
    --module move_pump --function buy ^
    --type-args 0xd177f070ac9dc7ca9cf13107ff9bebc74b4606ab75dde706e9a6bfa78377de23::nsell::NSELL ^
    --args 0xd746495d04a6119987c2b9334c5fefd7d8cff52a8a02a3ea4e3995b9a041ace4::3038839::true 0::0 ^
    0x3f2d9f724f4a1ce5e71676448dc452be9a6243dac9c5b975a588c8c867066e92::1587827::true ^
    904956798544794 ^
    0x0000000000000000000000000000000000000000000000000000000000000006::1::false ^
    --gas 0xadd7864f026906e79b…09770cd752668e5ef0e9203b0fc81a --gas-budget 1000000000


    Обрати внимание, что каждый ObjectID должен начинаться с 0x, что прямым текстом написано в ошибке.
    Написано
  • Чем восстановить данные с Ext4?

    grantur5707
    @grantur5707
    Проблема в том, что все об этом думают только после того, как что-то случится...
    Написано
  • Как преобразовать следующий код React Router Dom версии 6.9.0 в V6.26.2?

    grantur5707
    @grantur5707
    Mark, упс...

    import React from "react";
    import { BrowserRouter, Routes, Route } from "react-router-dom";
    import { Cart } from "./components/cart/Cart";
    import { Catalog } from "./components/catalog/Catalog";
    import { About } from "./pages/About";
    import { MainPage } from "./components/mainPage/MainPage";
    import { Page404 } from "./pages/Page404";
    import { ProductPage } from "./components/productPage/ProductPage";
    import { Menu } from "./components/menu/Menu";
    import { Contacts } from "./pages/Contacts";
    import { Footer } from "./UI/Footer";
    import { Banner } from "./UI/Banner.jsx";
    import { useDispatch } from "react-redux";
    import { resetClicks } from "./app/store/searchBarSlice";
    
    function App() {
        const dispatch = useDispatch();
    
        const hideMenuSearchBar = () => {
            dispatch(resetClicks());
        };
    
        return (
            <BrowserRouter basename="/test">
                <div className="App">
                    <Menu />
                    <main className="container" onClick={hideMenuSearchBar}>
                        <div className="row">
                            <div className="col">
                                <Banner />
                                <Routes>
                                    <Route path="/" exact element={<MainPage />} />
                                    <Route path="/about" element={<About />} />
                                    <Route path="/products/:prdId" element={<ProductPage />} />
                                    <Route path="/cart" element={<Cart />} />
                                    <Route path="/contacts" element={<Contacts />} />
                                    <Route path="*" element={<Page404 />} />
                                    <Route path="/:catId" element={<MainPage />} />
                                    <Route path="/catalog/:catId?" element={<Catalog isCatalogPage={true} />} />
                                </Routes>
                            </div>
                        </div>
                    </main>
                    <Footer />
                </div>
            </BrowserRouter>
        );
    }
    
    export default App;
    Написано
  • Как сделать грамотный счетчик в питоне?

    grantur5707
    @grantur5707
    Only4You, ничего особенного, обычное ООП :)
    Написано
  • Функция увеличивает ЗП, если ошибка то уведомление админу?

    grantur5707
    @grantur5707
    syb2024, функция должна вернуть правильное значение в зависимости от того, произошла ошибка или нет. Если зарплата успешно увеличена, функция должна отправить уведомление сотруднику и вернуть успешный результат, а в случае ошибки - уведомить администратора и вернуть false.
    Написано
  • Функция увеличивает ЗП, если ошибка то уведомление админу?

    grantur5707
    @grantur5707
    syb2024,
    function increaseSalary() {
      let employeeWithNewSalary;
    
      return api.getEmployees()
        .then(employeeData => {
          const [minSalaryEmployee] = employeeData.reduce(([minEmployee, minSalary], employee) => {
            const { salary } = employee;
            return (salary < minSalary
              ? [employee, salary]
              : [minEmployee, minSalary]
            );
          }, [null, Infinity]);
          const { id, salary: oldSalary } = minSalaryEmployee;
          const newSalary = oldSalary * 1.2;
          return { id, salary: newSalary };
        })
        .then(({ id, salary }) => {
          return api.setEmployeeSalary(id, salary)
            .then(updatedEmployee => {
              employeeWithNewSalary = updatedEmployee;
              return updatedEmployee;
            });
        })
        .then(() => {
          return api.notifyEmployee(employeeWithNewSalary.id, `Hello, ${employeeWithNewSalary.name}! Congratulations, your new salary is ${employeeWithNewSalary.salary}!`);
        })
        .then(() => {
          return true;
        })
        .catch(e => {
          return api.notifyAdmin(e).then(() => false);
        });
    }
    Написано
  • Функция увеличивает ЗП, если ошибка то уведомление админу?

    grantur5707
    @grantur5707
    syb2024, а какой результат вообще вы хотите получить?
    Написано
  • Функция увеличивает ЗП, если ошибка то уведомление админу?

    grantur5707
    @grantur5707
    syb2024,
    function increaseSalary() {
      let employeeWithNewSalary;
      
      return api.getEmployees()
        .then(employeeData => {
          const [minSalaryEmployee] = employeeData.reduce(([minEmployee, minSalary], employee) => {
            const { salary } = employee;
            return (salary < minSalary
              ? [employee, salary]
              : [minEmployee, minSalary]
            );
          }, [null, Infinity]);
          const { id, salary: oldSalary } = minSalaryEmployee;
          const newSalary = oldSalary * 1.2;
          return { id, salary: newSalary };
        })
        .then(({ id, salary }) => {
          return api.setEmployeeSalary(id, salary).then(updatedEmployee => {
            employeeWithNewSalary = updatedEmployee;
            return updatedEmployee;
          });
        })
        .then(() => {
          return api.notifyEmployee(employeeWithNewSalary.id, `Hello, ${employeeWithNewSalary.name}! Congratulations, your new salary is ${employeeWithNewSalary.salary}!`);
        })
        .catch(e => {
          return api.notifyAdmin(e);
        });
    }
    Написано
  • Как скачать несколько файлов из FTP-сервера через Python?

    grantur5707
    @grantur5707
    Everything_is_bad, я не стал расжовывать ему данное решение, потому что вы это уже сделали за меня :)
    Написано
  • Как отключить автоматическое завершение работы браузера при выходе из функции в Playwright?

    grantur5707
    @grantur5707
    Дмитрий Зеленев, объяви поля browser и page как nullable, а затем добавь проверки на null перед их использованием:

    IBrowser? browser;
    IPage? page;
    
    async Task InitializeBrowserAsync()
    {
        var playwright = await Playwright.CreateAsync();
        browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });
        page = await browser.NewPageAsync();
    }
    
    async Task CreateRegistryAsync()
    {
        if (page == null) throw new InvalidOperationException("Page is not initialized");
        await page.GetByRole(AriaRole.Button, new() { Name = "Создать реестр" }).ClickAsync();
    }
    
    ...
    Написано
  • Как можно укоротить код в foreach?

    grantur5707
    @grantur5707
    maksam07, судя по интерпретации вопроса автор не хочет тянуть волокиту установки соответствия большого количества ключей внутри foreach. Технически разницы то конечно никакой, но я честно говоря не понимаю вообще для чего это ему нужно, задача немного странная
    Написано
  • Как правильно настроить права в Docker?

    grantur5707
    @grantur5707
    contra1, именно с uid: 1000 и нужно было начинать)
    Написано
  • Как правильно настроить права в Docker?

    grantur5707
    @grantur5707
    Владислав Лысков, вероятнее всего он понял немного иначе, либо я его ввёл в заблуждение ненужным USER :)
    Написано
  • Как отправить форму со скрытыми полями Django, значения в которых должны вычислятся на основе не скрытых полей?

    grantur5707
    @grantur5707
    Invest00, да, всё верно. Чтобы не было расхождений по временной метке, надо генерировать сигнатуру на лету в момент нажатия кнопки "Оплатить" ajax запросом, а уже после перенаправлять пользователя на форму оплаты
    Написано
  • Каким образом спарсить курс на пайтон?

    grantur5707
    @grantur5707
    Михаил Р., интересно, по каким признакам вы это определили...
    Написано
  • Каким образом спарсить курс на пайтон?

    grantur5707
    @grantur5707
    Михаил Р., не может, всё верно. Но то, что я копипащу ответы нейронки, как вы сказали, это ваше субъективное мнение
    Написано
  • Каким образом спарсить курс на пайтон?

    grantur5707
    @grantur5707
    Михаил Р., кстати, раз уж вы подняли этот вопрос, вы считаете, что chat gpt не может быть помощником в кодинге?
    Написано