• Какой верный подход при создании многостраничного react приложения?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. В вашем случае нет, вам же, насколько я понимаю, нужна навигация без перезагрузки страницы.
    2. Забудьте на время разработки что такое JQuery и подходы которые с ним принято использовать. По поводу библиотек, экосистема react содержит множество библиотек. Так же есть смыл подключить библиотеку для ajax запросов axios/superagent/etc. Вообще, перед тем как подключать какую-либо библиотеку лучше 3 раза подумать, так как многие из них существенно увеличивают размер бандла, например, тот же moment. Для того чтобы быть в курсе того, что и сколько в вашем бандле занимает места можно подключить в prod сборку webpack-bundle-analyzer.
    3. Почитайте про роутинг на стороне клиента. Для React разработки стандарт react-router.
    4. SSR.
    Ответ написан
    Комментировать
  • Как можно посмотреть локальный сайт на моем компе через телефон?

    boratsagdiev
    @boratsagdiev
    UPD: в 2023 году я бы всё же использовал ngrok.

    Ставим npm и browser-sync: https://www.browsersync.io/

    Запускаем локальный сервер (у меня Openserver), открываем консоль в локальной папке, где лежит ваш сайт и запускаем в ней browser-sync с опцией --proxy

    browser-sync start --proxy mylocal.dev

    browser-sync выдаст в консоль что-то такое:

    [BS] Proxying: http://local.dev.domain
    [BS] Access URLs:
     ------------------------------------
     Local: http://localhost:3002
     External: http://192.168.1.6:3002
     ------------------------------------
     UI: http://localhost:3003
     UI External: http://192.168.1.6:3003
     ------------------------------------


    Вам нужен тот что External - http://192.168.1.6:3002, вбиваете его на телефоне и смотрите (естественно телефон должен быть подключен к той же сети, куда подключен и ПК).
    Вот только что проверил с сайтом на Wordpress - работает.
    Ответ написан
    Комментировать
  • Почему плохо писать * box-sizing border-box?

    Raxen
    @Raxen
    TechLead Frontend Developer, Beeline
    Не плохо. Я пишу, мне хорошо. Я туда еще и псевдоэлементы обычно добавляю, некоторые исключают или пишут ниже отдельные box-sizing для элементов, к которым они привыкли в другой модели, мне так редко это нужно, что когда нужно, я меняю этот момент в классе элемента.
    Ответ написан
    4 комментария
  • Как сделать preloader для картинки?

    archakov06
    @archakov06
    Frontend-разработчик (ReactJS)
    1. Ставите какой-нибудь прелоадер в src. Типа сплошной серый фон (не картинка, а CSS'ом например).
    2. В img, задаете еще один атрибут data-src в нем храните оригинальное изображение. Оно не будет подгружаться.
    2. Через jQuery или window.onload проверяете, что страница загрузилась.
    3. Если все загрузилось, то вытаскиваем из data-src оригинал и вставляем в src

    Если используется прелоадер CSS (то есть просто сплошной цвет), то для img ставьте класс preload или любой другой, который означает, что картинка еще не загрузилась. Когда страница загрузится, убираете у всех картинок класс и ставите им оригинальное изображение.

    Примерно так, я делал в своем блое - https://archakov.im/ . Там изображения с размытым эффектом.
    Ответ написан
    Комментировать
  • Как использовать useEffect вместо componentDidMount и componentWillUnmount?

    profesor08
    @profesor08
    const User = ({ firebase }) => {
      const [authUser, setAuthUser] = useEffect(null);
    
      useEffect(() => {}, [
        // код который в componentDidMount
        firebase.auth.onAuthStateChanged(authUser => {
          setAuthUser(authUser);
        });
    
        return () => {  // код который в componentWillUnmount
          // хз зачем тебе обращаться еще раз к API, можешь даже не писать этот return, но если надо, то делай необходимые вещи перед уничтожением компонента
          setAuthUser(null); 
        };
      ], []); // если массив пустой, то хук сработает один раз при монтировании компонента. Если массив не передавать, хук сработает при каждом рендере кмпонента. Если передать аргументы, то сработает при их изменении.
    };
    Ответ написан
    Комментировать
  • Как отслеживать прокрутку вверх и вниз по отдельности?

    kasheibess
    @kasheibess
    веб уже не тот
    Если нужно определять направление, когда документ прокручивают стрелками с клавиатуры или перетаскиванием ползунка скроллбара, то как вариант - https://codepen.io/login2030/pen/wvweMzW

    var scrollPos = 0;
    $(window).scroll(function(){
       var st = $(this).scrollTop();
       if (st > scrollPos){
         $('#result').html('Вниз');
       } else {
         $('#result').html('Вверх');
       }
       scrollPos = st;
    });
    Ответ написан
    2 комментария
  • Как передать props через Link в react-router?

    @Pirantul
    Frontend-разработчик
    Данные из одной страницы в другую, через Link передаются таким образом,
    на первой странице:
    <Link to={{
                pathname: "/search",
                propsSearch: myData
            }}>Ссылка</ Link>

    На странице "/search" данные можно достать так:
    import React from 'react';
    import {Redirect} from 'react-router-dom';
    
    export default function Search(props) {
       console.log(props.location.propsSearch); // Наши переданные данные
       //Но учтите, что они будут доступны только, при переходе по этой ссылке. 
       //Если страницу перезагрузить, то получим - undefined. 
       //Это решается редиректом обратно, если нет пропса:
       if (!props.location.propsSearch) return <Redirect to="/firstpage" />;
    ...
    }
    Ответ написан
    Комментировать
  • Как лучше задать события когда много элементов?

    @Che603000
    c 2011 javascript
    Стандартное решение вешать событие event click на внешний блок <div/>.
    Тогда в event.currentTarget - получите элемент на котором событие произошло, ну и далее логика Ваша.

    P.S. Приз моих симпатий за внятно сформулированный вопрос.
    Ответ написан
    2 комментария
  • Как загрузить страницу потом выполнить скрипт?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Если нужно дождаться загрузки абсолютно всех ресурсов, включая картинки, то можно так:
    window.addEventListener('load', starter); // Ждем полной загрузки стр. и запускаем функцию starter()
    
    function starter() {
        // Произвольный код
    }


    А в целом ваш вариант правильный:
    document.addEventListener('DOMContentLoaded', starter); // Ждем готовности дерева элементов и запускаем starter()
    
    function starter() {
        // Произвольный код
    }

    Ответ написан
    Комментировать
  • Как загрузить страницу потом выполнить скрипт?

    wapster92
    @wapster92 Куратор тега JavaScript
    Ну еще можно так <script defer src="script.js"></script>
    Ответ написан
    3 комментария
  • Как каждый следующий элемент массива повторять на один раз больше предыдущего?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const newArr = arr.map((n, i) => n.repeat(i + 1));

    или

    const newArr = arr.map((n, i) => Array(i + 1).fill(n).join(''));

    или

    const newArr = arr.map((n, i) => Array(i + 2).join(n));

    или

    const newArr = [];
    
    for (let i = 0; i < arr.length; i++) {
      let str = '';
    
      for (let j = 0; j <= i; j++) {
        str += arr[i];
      }
    
      newArr.push(str);
    }

    или

    const newArr = [];
    
    for (const n of arr) {
      let str = '';
    
      while ((str = str.concat(n)).length <= newArr.length) ;
    
      newArr[newArr.length] = str;
    }
    Ответ написан
    1 комментарий