• Как в react typescript передать props и children в компонет?

    nowm
    @nowm
    balex777, а вам реально нужно в коде писать «& typeof defaultProps», когда вы делаете «type PropTypes =»?. Просто вы и так уже описали, что goBackText — это строка, а children — это React.ReactElement, и когда вы добавляете «typeof defaultProps», вы искажаете описание типа. Вместо этого можно написать так:

    type PropTypes = {
      title: string,
      goBackText?: string,
      children?: React.ReactElement | null,
    };
  • Как отрендерить страницу при SSR?

    nowm
    @nowm
    Сергей Горностаев, а смысл ждать реакции модератора? Любой пользователь может отредактировать вопрос и добавить/убрать теги или изменить содержимое вопроса, если считает, что что-то не так. Нажимаете три точки под вопросом и выбираете ссылку «Поправить вопрос». Для этого не обязательно быть автором этого конкретного вопроса.

    Я просто сначала подумал, что вы хотите обсудить момент, связанный с тем, что такая ситуация не часто встречается и приглашаете к диалогу — не сразу заметил, что это была просто попытка выразить недоумение по поводу неправильных тегов.
  • Как отрендерить страницу при SSR?

    nowm
    @nowm
    Сергей Горностаев, ну да, тут согласен. Многие фреймворки и языки позволяют делать такие вещи в SSR. Но в JS часто встречается ситуация, когда для отдельных задач используются более специализированные компоненты. ExpressJS — отдельный компонент, который отвечает за обработку запросов, шаблонизатор — тоже отдельно. Работа с БД — ещё какой-то отдельный компонент от совсем другого автора. Такие комплексные вещи, как, например, Django в Python, который умеет делать сразу всё и который за счёт этого упрощает разные вещи, в JS редко встречаются, и вообще подход с большими фреймворками не так популярен.

    Единственное, я не согласен, что «мало где приходится подобные вещи руками». NodeJS используется всё больше и больше — за счёт того, например, что можно использовать для отрисовки контента одни и те же компоненты и на серверной стороне и в браузере, сначала генерируя страницу на серверной стороне, а потом «оживляя» её в браузере, из-за чего возникает впечатление мгновенной загрузки сайта. Из-за роста популярности NodeJS и недостаточности фреймворков «всё в одном» на JS, такие моменты встречаются чаще и чаще, потому что NodeJS начинает занимать в теме «web-разработка» больше и больше места.
  • Как отрендерить страницу при SSR?

    nowm
    @nowm
    Сергей Горностаев, смысл всего этого в том, что, например, у вас на сайте может использоваться несколько шаблонов для разных ситуаций. Страница со статьями — полностью отдельный шаблон, лэндинг сайта — полностью отдельный шаблон, страница товара — отдельный шаблон. И так далее. В каждом из этих шаблонов нужно использовать одинаковые ссылки. Можно их прописывать прямо как <a href="/signup">Sign Up</a>, а потом, если нужно что-то поменять, просто пользоваться поиском по коду в IDE и править вручную. А можно завести один глобально доступный объект со ссылками, и в каждом шаблоне тянуть их из этого объекта. В таком случае, если вам нужно поправить адрес, вы редактируете один объект, и все шаблоны подхватывают изменения автоматически.
  • Помогают ли ссылки типа /go?адрес-другого-сайта в SEO-оптимизации?

    nowm
    @nowm Автор вопроса
    С php — это, наверное, из-за того, что не нужно на уровне веб-сервера делать rewrite. А $_GET['to'] используется потому что если не задавать имя GET-переменной, то парсинг целевого адреса немного усложнется и GET-параметры из него могут заполнить эту переменную. Я не помню сейчас, как я в PHP этот вопрос решал, но я точно помню, что пару раз такая задача встречалась.

    На NodeJS, на котором я сейчас пишу, это проще реализовать в виде /go?url — без упоминания расширений файлов и GET-переменных, если сравнивать с PHP. По поводу запрета индексирования: я его в зависимости от целевого домена делаю с помощью
    response.setHeader('x-robots-tag', 'noindex, nofollow, noarchive');
    . Для некоторых запрещаю заголовками, для некоторых — нет, для отдельных адресов делаю вообще 301-й редирект, чтбы вес передавался.

    ---

    В общем, я ваш ответ понял так: негативный момент №1 (про то, что гугл может подумать, что я плохо работал) — это действительно слухи, а не реальное положение дел, потому что, по вашему опыту, гугл на большую кучу непонятных go-ссылок не обижается, правильно?
  • Как узнать на каком скрытом HTML элементе установился фокус?

    nowm
    @nowm
    Сергей Кореневский, я специально писал выше «по этому элементу в логах». Не на странице. В Firefox console.log, когда выводит DOM-элемент, делает это специальным образом, так что (в самой консоли, а не на странице) с этим элементом можно что-то делать. Например, можно по нему кликнуть правой кнопкой мыши. Или можно просто навести на него курсор, и Firefox его подсветит на странице. И так далее.

    Вот что я имел ввиду:

    5fa0b67ef0636308531013.png
  • Как узнать на каком скрытом HTML элементе установился фокус?

    nowm
    @nowm
    Сергей Кореневский, Тут я посоветовать ничего не могу. Я не знаю просто, как это в Chrome организованно. В Firefox, например, я могу просто правой кнопкой мыши кликнуть по этому элементу в логах и выбрать «Reveal in Inspector» — меня перекидывает во вкладку со схемой DOM, где этот элемент уже сразу выбран.

    Кстати, странно: мне пришло письмо, что ответ выбран решением, но он при этом не выбран решением.
  • Как проверить какой option выбран у SELECT, в MVC?

    nowm
    @nowm
    Артем, сам ajax правильный. Это экшен возвращает HTML, а не JSON. Я не знаю, что это за движок или что за фреймворк, так что не могу сказать, как и на какие URL нужно отправлять запросы, чтобы достичь того, что вы пытаетесь достичь.

    Мне сразу было видно, что вы не очень хорошо разбираетесь, поэтому я и посоветовал нанять разработчика (на всякий случай уточню, что лично я не нанимаюсь). Ему можно будет доверить код и он либо сам сделает то, что вам нужно, либо проконсультирует нормально.
  • Как проверить какой option выбран у SELECT, в MVC?

    nowm
    @nowm
    Артем, С официального сайта PHP: $_POST. Вместо $parameters = $segments; можно сделать

    $parameters = array_values(array_merge($segments, $_POST));


    Тут есть много тонкостей, связанных с позицией переменных, но в общем случае всё должно нормально заработать, и если соответствующий метод ожидает параметр, он должен туда попасть. Если и это будет слишком сложно для понимания, я могу только посоветовать нанять программиста, который сделает всё за вас.
  • Как вывести текст из одной строки в формате "артист - песня" с помощью JS без багов?

    nowm
    @nowm
    Pavel Pavel, я могу только подсказать что-нибудь, когда у меня есть свободное время. Я просто раньше помогал людям с кодом, но это всегда в итоге превращается в работу (чаще всего бесплатную), а у меня сейчас 2 рабочих + 2 личных проекта, которые нужно поддерживать и развивать, так что новую работу я не имею возможности взять из-за нехватки времени. Извиняюсь, но правда не получится.
  • Как вывести текст из одной строки в формате "артист - песня" с помощью JS без багов?

    nowm
    @nowm
    Но если у вас в том XML-файле, из которого берутся данные на стороне сервера, нет разделения на артиста/песню, то с JSON даже нет смысла заморачиваться, потому что это не поможет.
  • Как вывести текст из одной строки в формате "артист - песня" с помощью JS без багов?

    nowm
    @nowm
    Pavel Pavel, в pn2.php вместо echo $artist . ' - ' . $song; достаточно сделать
    echo json_encode(['artist' => $artist, 'song' => $song]);
    , а в JS заменить 4 === xmlhttp.readyState /* . . . */ (всю эту строку — я просто сократил, чтобы коммент уменьшить) на это:

    if (4 !== xmlhttp.readyState || 200 !== xmlhttp.status) {
        return;
    }
    
    var data = JSON.parse(xmlhttp.responseText);
    
    artist_info.innerText = data['artist'];
    song_info.innerText = data['song'];
    
    console.log('Got data from pn2.php', data);


    Насчёт контента в PHP я могу и ошибаться и код, который я показал — просто пример, но у вас там, скорее всего должны быть доступны какие-то переменные, в которых содержится, раздельно, имя исполнителя и название трека. Вместо объединения их в строку просто вызывается json_encode для массива — я думаю, идея понятна. Если нет, то покажите код на php и я попрубую пояснить, как его исправить, чтобы использовать JSON.
  • Как вывести текст из одной строки в формате "артист - песня" с помощью JS без багов?

    nowm
    @nowm
    Pavel Pavel, split("\s-\s") не будет работать, потому что нужно писать это так: split(/\s-\s/). Опять же, JSON лучше, потому что могут быть ситуации, когда это встретится внутри той части, которая относится к авторам, а иногда — в той части, которая относится к названию. Например, автор: «Иван Иванов - проект Мой первый сингл», а название: «Хорошая погода - это круто». Но это ваше дело, я навязывать не буду — я просто обратил внимание, что с JSON удобнее работать.
  • Как изменить место placeholder?

    nowm
    @nowm
    Ankhena, да, я как раз про это упоминал в ответе — возможно вы старую версию увидели. Согласен, что логичнее, потому что нестандарно расположенный плейсхолдер сильно сбивает с толку.
  • Как назначить метод обработки на input в Sweetalert2?

    nowm
    @nowm
    danilr, кстати, ещё, как вариант, когда вы использовали oninput="myMethod" это могло не сработать из-за того, что в HTML-атрибутах нужно писать обычный JS-код. То есть, вместо myMethod нужно было писать myMethod(), чтобы что-то работало.
  • Как назначить метод обработки на input в Sweetalert2?

    nowm
    @nowm
    danilr, добавил это в ответ — вдруг кому-то пригодится.
  • Как назначить метод обработки на input в Sweetalert2?

    nowm
    @nowm
    danilr, да, с ним сложно становится работать, если нужно что-то хоть немного нестандартное. Кстати, если вы используете ReactJS, то можно использовать «sweetalert2-react-content». С ним у вас будет возможность в качестве HTML использовать компоненты ReactJS, в которых можно делать всё, что угодно, включая кастомные обработчики событий, привязанные к конкретным элементам. Я делал примерно такую вещь:

    import SwalRaw from "sweetalert2";
    import withReactContent from 'sweetalert2-react-content';
    
    const Swal = withReactContent(SwalRaw);


    И потом, Swal вызывается как обычно, но можно дополнительно использовать компоненты ReactJS для таких options как: title, html, confirmButtonText, denyButtonText, cancelButtonText, footer и closeButtonHtml.
  • Как остановить ratchet из php?

    nowm
    @nowm
    Alex, и, кстати, я полностью согласен с Falconer — вебсокет-сервер на PHP — не самая удачная идея, даже при условии, что используется готовое решение, вроде Ratchet.

    Я пишу на PHP уже больше 10-ти лет, и у меня складывается впечатление, что для долгоиграющих процессов, вроде вебсокет-сервера, он не очень подходит, потому что он синхронный, а в сценариях с вебсокетами часто требуются асинхронные операции и асинхронный подход вообще. Ratchet для асинхронности использует ReactPHP, и чтобы использовать дополнительную асинхронность в своём личном коде на PHP (не связанном напрямую с Ratchet, а если, например, вам захочется параллельно вытащить данные из БД и сделать запрос к какому-нибудь API, чтобы сократить время работы), нужно будет использовать его тоже, и код в таком случае получается зубодробительным, и вам во сне будут сниться слова «new», «factory» и «loop» после этого — настолько часто вы их будете использовать. В итоге, когда мне требуется вебсокет-сервер, я пишу его на JavaScript под NodeJS, а PHP использую только когда нужно генерировать HTML-страницы с какими-то данными из БД.
  • Как остановить ratchet из php?

    nowm
    @nowm
    Alex, когда используется «&», в терминал выводится что-нибудь, вроде [1] 10349. Здесь «[1]» — это номер фоновой задачи (список таких задач доступен через вызов jobs -l), а «10349» — это PID процесса который был запущен в фоне. Так что, можно пропарсить результат запуска и вытащить оттуда PID.

    Ещё, можно завершать процесс по шаблону команды. Например, если нужно завершить всё, где упоминается «скрипт.php», нужно запускать команду pkill -f "скрипт.php".