• Что вызывает ошибку, как установить react pagination?

    TMProject
    @TMProject
    Константин,
    Например так:
    1. Определите конфликтующие пакеты и версии React, которые используются в вашем проекте. Это можно сделать, посмотрев на список зависимостей в файле package.json вашего проекта.

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

    3. Если версии React не совместимы, обновите версии пакетов, чтобы они использовали совместимые версии React. Обычно это делается путем изменения версий зависимостей в файле package.json.

    4. Запустите команду npm install или yarn install, чтобы установить обновленные версии зависимостей.

    5. Проверьте работу вашего проекта после обновления зависимостей


    А в целом писать код для своих нужд самому. Это не так уж и проблемно.
  • Как проверить history в react-router-dom (v5) на пустоту?

    TMProject
    @TMProject
    lexstile, Значение length у объекта history сохраняется даже после обновления страницы или перезапуска браузера. Это означает, что если пользователь заходит на ваш сайт в первый раз и переходит на несколько страниц, то length будет увеличиваться на каждый переход и сохраняться в истории браузера. Если пользователь затем обновляет страницу, length не будет сбрасываться, и он все еще будет содержать предыдущие записи в истории переходов.

    Вы также можете проверить последнее действие в истории, чтобы определить, был ли пользователь на других страницах до текущей. Для этого можно использовать свойство action объекта history.

    Свойство action показывает тип действия, приведшего к текущей записи в истории. Допустимые значения для action - это "PUSH" (когда пользователь перешел на новую страницу), "REPLACE" (когда был выполнен заменяющий переход на страницу) и "POP" (когда пользователь нажал на кнопку "назад" в браузере и вернулся на предыдущую страницу).

    Вот пример использования свойства action, чтобы проверить, был ли пользователь на других страницах до текущей:

    import { useHistory } from "react-router-dom";
    
    function MyComponent() {
      const history = useHistory();
    
      function handleGoBack() {
        const lastAction = history.action;
        if (lastAction === "POP") {
          console.log("Вы находитесь на первой странице");
        } else {
          history.goBack();
        }
      }
    
      return (
        <div>
          <button onClick={handleGoBack}>Назад</button>
        </div>
      );
    }


    В этом примере мы проверяем, было ли последнее действие пользователя "POP" (то есть, он только что вернулся на страницу с помощью кнопки "назад" в браузере). Если это так, мы рассматриваем это как ситуацию, когда пользователь находится на первой странице, и выводим сообщение об этом в консоль. Если последнее действие было не "POP", то мы используем goBack() для перехода на предыдущую страницу
  • Как работать с асинхронными функциями в reducer redux?

    TMProject
    @TMProject
    kfedor, Да, вы правы. Я по ошибке подумал, что вы используете хуки в React компоненте, но вам необходимо использовать useDispatch внутри React компонента или функционального компонента, который использует хуки.

    Если вы используете классовый компонент, то вы можете получить доступ к dispatch через connect функцию из библиотеки react-redux, например:
    import { connect } from 'react-redux';
    import { undo } from './canvasSlice';
    
    class MyComponent extends React.Component {
      handleClick = () => {
        this.props.undo();
      }
    
      render() {
        return (
          <button onClick={this.handleClick}>Undo</button>
        );
      }
    }
    
    export default connect(null, { undo })(MyComponent)


    Здесь мы используем connect для связи компонента с Redux хранилищем и передаем undo функцию из нашего slice как пропс.

    Если вы используете функциональный компонент, вы можете использовать хук useDispatch следующим образом
    import { useDispatch } from 'react-redux';
    import { undo } from './canvasSlice';
    
    function MyComponent() {
      const dispatch = useDispatch();
    
      const handleClick = () => {
        dispatch(undo());
      }
    
      return (
        <button onClick={handleClick}>Undo</button>
      );
    }
    
    export default MyComponent


    Здесь мы используем useDispatch хук для получения функции dispatch и вызываем dispatch с undo action creator из нашего slice
  • Как работать с асинхронными функциями в reducer redux?

    TMProject
    @TMProject
    kfedor,
    Ошибка "Cannot read properties of undefined (reading 'getContext')" возникает потому, что свойство "canvas" в состоянии "state" становится "null" после первого вызова функции "undo". Вероятно, это происходит из-за того, что вы удаляете элемент из массива "undoList" в строке "const dataURL = state.undoList.pop();" и, возможно, что-то идет не так с асинхронной загрузкой изображения.

    Вам следует убедиться, что "canvas" всегда существует и что изображение было загружено успешно, прежде чем использовать "ctx" для выполнения действий на холсте. Вы можете использовать обработку исключений для перехвата ошибок при загрузке изображения, например, так
    undo: async (state) => {
      const { canvas, undoList, redoList } = state;
      if (undoList.length && canvas) {
        const dataURL = undoList.pop();
        redoList.push(dataURL);
        const img = new Image();
        img.src = dataURL;
        await img.decode();
        const ctx = canvas.getContext('2d');
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
      } else if (canvas) {
        const ctx = canvas.getContext('2d');
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        console.log('Нет элементов для отката');
      } else {
        console.log('canvas is null');
      }
    }


    Этот код проверяет наличие canvas и только тогда вызывает метод getContext. Если canvas не существует, то функция просто выведет сообщение об ошибке в консоль
  • Как в Array From в mapfn добавить {value: "",value1:""}?

    TMProject
    @TMProject
    Тут инпуты не причем. Поставь точки останова и посмотри что не так. Учись дебажить.
  • Как сделать отправку уведомлений если сайт закрыт?

    TMProject
    @TMProject
    AndreyVolkov72,
    Тебе бэк нужен для этих действий, одним фронтом не обойдёшься.
    Именно бэк, например по крону, отрабатывает сравните твои условия и шлёт уведомления в телегу
  • Цикл создания инпутов?

    TMProject
    @TMProject
    inputArray разбивай на части на нужно количество и далее по аналогии
  • Как вызвать функцию только раз в useEffect при разных изменениях?

    TMProject
    @TMProject
    Ну так добавь условие при котором тебе нужна подгрузка.

    useEffect(() => {
            setPage(1);
        }, [activeTab]);
    
        useEffect(() => {
            if (page ===1) {
            loadItems();
    }
        }, [page]);
  • Ссылка POST для загрузки Resource в React admin возможна?

    TMProject
    @TMProject
    zzmaster, засунь ответ в локальный Стейт, и Стейт выводи.
  • Phpmailer - какой из способов правильный и где ошибаюсь?

    TMProject
    @TMProject
    alexiusgrey,
    Тогда не знаю, что не так.
    У меня, на данный момент, во многих проектах используется эта библа и smtp яндекса. Проблем нет. Хостеры в основном все РФ, но есть забугорные, но тоже без проблем.
    Так что, спросите техподдержку хостинга.
  • Phpmailer - какой из способов правильный и где ошибаюсь?

    TMProject
    @TMProject
    1. Если используется почта для домена, то логин должен быть полным (mail@domain.com), если нет - то только до @.
    2. Нужно в настройка аккаунта Яндекса разрешить подключение. И создать пароль приложения. И этот пароль использовать в скрипте


    On "Mail → All settings → Email clients" page check "Use a mail client to retrieve your Yandex mail - From the imap.yandex.com server via IMAP" and "IMAP authorization method - App passwords and OAuth tokens".

    On "Account management" page in "Passwords and authorization" section select "Enable app passwords" and create new application password.



    Тут почитай
  • Phpmailer - какой из способов правильный и где ошибаюсь?

    TMProject
    @TMProject
    А сам сервер, где хостится сайт имеет доступ к Яндексу? Блока нет на стороне провайдера?
  • Phpmailer - какой из способов правильный и где ошибаюсь?

    TMProject
    @TMProject
    alexiusgrey, а че играть с портами, есть документация там все есть.
    У тебя ошибка. У Яндекса порт smtp 465
  • Phpmailer - какой из способов правильный и где ошибаюсь?

    TMProject
    @TMProject
    alexiusgrey, подключение файла мало, т.к. используется другое пространство имён.

    require 'path/to/PHPMailer/src/Exception.php';
    require 'path/to/PHPMailer/src/PHPMailer.php';
    require 'path/to/PHPMailer/src/SMTP.php';
    
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;


    Загляни на офф доку там все есть.
  • Почему не выводится onsale?

    TMProject
    @TMProject
    Yes It's matrik, отметь как решение и будет не за что
  • Почему не выводится onsale?

    TMProject
    @TMProject
    Покажи компонент OnSale, вероятно ты забыл в нем про {children} или вместо этого компонента попробуй обычный div