• Как перевести код с с++ на js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Переписывается практически как есть:
    function Generate(s) {
      if(s.length === 1) return [s];
      const ans = [];
      const last = s[s.length - 1];
      s = s.slice(0, s.length - 1);
      const prev = Generate(s);
      for (const entry of prev) {
        ans.push(entry + last);
        ans.push(entry + '.' + last);
      }
      return ans;
    }
    Ответ написан
    Комментировать
  • Каким образом конкуренты выходят на наших онлайн-клиентов?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    передавайте привет бывшему разрабу и ищите куда он всунул бэк
    Ответ написан
    9 комментариев
  • Как собрать страницу из react-компонентов?

    @McBernar
    Экспортируете свои компоненты из файлов, импортируете их в свои страницы.

    Создайте папку pages, там создайте точно такой же компонент, как и другие, импортируйте туда нужное и расставляйте лейаут. Для мета-тегов можно использовать react-helmet. Для роутинга react-router.

    Страница от компонента не отличается ничем.
    Ответ написан
    Комментировать
  • Как собрать страницу из react-компонентов?

    @tervizator
    Расширение только js
    Для того чтобы их подключить, необходимо с начало сделать export, а после import ваших компонентов
    Ответ написан
    Комментировать
  • Что стоит выучить новичку?

    @Nolan81
    программист
    Что лучше изучить Vue, React, Jquery и чем последний отличается от двух предыдущих

    С React-ом не сталкивался.
    Все время работал с jQuery.
    Сейчас выучил Vue.

    Разница между ними огромная.
    jQuery - это просто удобная библиотека для операций с DOM, то что раньше в js было делать муторно, jQuery исправило и на нем можно было писать понятный и безбажный код, без парения самим о кроссбраузерности.
    Но браузеры осовременились, работают примерно похоже, добавились там фичи новые и jQuery меньше стала нужна. Хотя именно под нее полно готовых расширений.
    jQuery легкий в изучении с небольшим знанием js.

    Vue - это другая опера.
    Имхо, намного сложнее в изучении и преследует совсем другие цели. На нем мы не манипулируем DOM сами, а пишем код который меняет состояние переменных и св-в, а внешний вид (html,css) уже реагирует на это.
    Разработка тут напоминает разработку на фреймворках бэкенда, когда каждое в своем файлике, которые потом вебпаком соберутся в один js.
    Ответ написан
    Комментировать
  • Как можно имитировать радиус у элемента?

    RAX7
    @RAX7
    Ответ написан
    Комментировать
  • Как можно имитировать радиус у элемента?

    Ragtime_Kitty
    @Ragtime_Kitty
    Через градиент вряд ли, можно нарисовать фон через SVG:
    Ответ написан
    Комментировать
  • Как правильно отрендерить сам товар/статью/etc при его открытии?

    @McBernar
    Ну тогда вместо id должен быть некий slug, который парсится и ищется в бд по этому имени, а не по id. Смысл тот же.
    Ответ написан
    2 комментария
  • Как внести переменную Twig шаблона во внешний js ?

    @JoyMefisto
    Frontend developer
    {% set protected_fields = protected_route_info(protectedRoute, [], true).code %} {# получаем переменную в twig #}


    <script> // и пробрасываем её в script
        (function () {
            let protectedFields = {{ protected_fields|json_encode|raw  }};
    
            console.dir(protectedFields);
        })();
    </script>
    Ответ написан
    Комментировать
  • Можно ли начинать изучать программирование с React.js?

    Austin_Powers
    @Austin_Powers
    Web developer (Symfony, Go, Vue.js)
    Вот мануал как это сделать, и последствия там же.

    А если серьезно, то конечно сперва надо изучить html/css/js а уже потмо лезть во все эти фреймворки. Иначе просто не поймешь, что там к чему.
    Ответ написан
    Комментировать
  • Правильная установка Windows и Linux UEFI?

    gbg
    @gbg Куратор тега Linux
    Любые ответы на любые вопросы
    Многабукав, вам надо было начинать рассказ от рождения вашей бабули.

    Ставите в любом порядке, потом в биосе цепляете UEFI загрузчики обеих ОС.
    Ответ написан
    Комментировать
  • Почему многие говорят что mern умер?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Почему они так говорят лучше у них спросить.
    насчет древности - стеку lamp лет 20, а mern - лет 5.
    Ответ написан
    Комментировать
  • Почему многие говорят что mern умер?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Потому что могут, вот и говорят
    Ответ написан
    Комментировать
  • Как найти первую работу Front end?

    @NovichokIvanovich
    начинающий программист
    спамь своими откликами на все вакансии тебя за это не убьют! пройдешь собез и дело в шляпе!
    Ответ написан
    Комментировать
  • Как работает сборщик мусор с колбеками Promise?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Сборщики мусора (далее GC) бывают разные, в том же v8 используется сразу 3 типа GC в зависимости от поколения объектов (упрощенно молодое, старое и сложные случаи), но в большинстве своем принцип работы сводится к просчету достижимости из некоторого корня в дереве объектов (например глобального объекта, но не только его). v8 не является исключением, и его GC содержит C++ api для создания таких корней. Из JS мы данным api можем воспользоваться лишь косвенно, через сущности языка предоставляемые либо самим v8 либо платформой (браузером, node.js, deno и т.д.)
    Чтоб было понятно давайте рассмотрим простой пример:
    const h = 'Hello world!';
    const n = 'nothing';
    setTimeout(() => {
      console.log(h);
    }, 1000);
    У нас есть строковые переменные h и n. Переменная n нигде больше не используется и ее память очистится при ближайшей работе GC. А вот переменная h оказалась в замыкании созданном стрелочной функцией. И хотя в JS мы не можем достучаться до h имея ссылку на эту функцию, сама функция все таки имеет ссылку на h, а значит h не может быть уничтожена пока не будет уничтожена сама функция. В терминах GC ссылка на h будет серой, то есть сама ссылка на h недоступна из корня напрямую, но сейчас мы проверяем объекты, которые на нее ссылаются и истина будет зависеть от них (подробнее можете погуглить "mark black white and gray memory in gc").
    Давайте посмотрим на саму стрелочную функцию, которая держит h в замыкании. Из кода видно, что мы ее передаем в функцию setTimeout, о которой известно, что это api предоставленное платформой (а значит вероятно какая-то часть написана на C++), а так же, что она асинхронная. Платформе реализующей setTimeout наша функция понадобится после асинхронного ожидания и никто платформе не сможет гарантировать, что во время этого ожидания не будет работы GC, поэтому ей ничего не остается, кроме как запросить у v8 создание нового корневого дерева объектов, в которое и будет положена ссылка на данную функцию.
    После же выполнения таймаута платформе больше не нужна наша функция, поэтому ссылка на нее будет удалена из дерева объектов. А так как других ссылок на функцию нет, и она больше не доступна ни из одного корня - GC удалит из памяти и функцию и строку связанную h, которая так же стала недоступна из корня.

    Посмотрим на пример из вопроса. У нас есть стрелочная функция, которая удерживает на себе инстанс компонента через this ссылку (так как стрелочные функции замыкают this). Саму функцию в памяти удерживает промис порожденный вызовом loader('url'), так как мы отдали её в метод then. Других ссылок на данную функцию нет, а значит и сама функция и ее замыкание (инстанс компонента) будут "жить" не менее "жизни" промиса.
    Скажем был отправлен запрос на сервер, но потом компонент в котором был объявлен промис и колбек был удален.
    И после удаления приходит ответ от сервера, и он выполнит колбек. Это значит что колбек остался в памяти со всеми переменными контекста
    Если других ссылок не осталось, то инстанс компонента будет удерживаться от очистки через промис.

    Теперь стоит разобраться с самим промисом. У него может быть 3 состояния - pending, resolved или rejected. После перехода в состояния resolved или rejected промис может выполнить сохраненные колбэки в ближайшем микротаске, а после он удалит на них ссылки из себя, в следствии чего, память удерживаемая замыканием колбэка может быть очищена (при отсутствии на нее других ссылок, достижимых из какого-либо корня).
    В состоянии pending промис может потенциально находится бесконечно долго, при этом ссылаясь на все колбэки переданные ему в методы then, catch или finally, а значит так же косвенно ссылаясь на их замыкания. И тут все зависит от того, кто ссылается на данный промис, и достижим ли он из корня. И да, промис вполне может быть удален из памяти так и не дождавшись своего завершения.
    интересное умозаключение
    Если Promise - это обещание, то в данном случае оно будет нарушено?


    В комментах к вопросу есть еще один интересный пример:
    function getSomething(){
      return new Promise((resolve, reject)=>{
        if(sys_condition){
           resolve();
        } 
      })
    }
    
    function testPromise(){
      let config = {....}
      getSomething().then(()=>{
         #use config
         goOn(...config)
      })
    }
    
    testPromise();
    У нас есть вызванная 1 раз функция testPromise, которая получает из функции getSomething промис, в который с помощью метода then сохраняет колбэк, удерживающий в замыкании переменную config. Сам промис она нигде не сохраняет, что здесь очень важно.
    В функции getSomething мы просто возвращаем промис созданный через его конструктор, который как мы уже знаем нигде больше не сохраняется. И на этом могло бы все и закончится, без вызова колбэка независимо ни от чего. Но конструктор промиса выполняет свой колбэк синхронно, а кроме того он передает в него 2 функции - resolve и reject, которые в своем замыкании ссылаются на только что созданный промис (а это уже 2 ссылки на него, хотя мы то его никуда не сохраняли). Переменная reject никак не используется, а значит спокойно может быть удалена после завершения колбэка. Переменная resolve просто вызывается как функция внутри условия, но более тоже никак не используется и никуда не сохраняется, а значит так же может быть удалена.
    В этом примере. если sys_condition = false и resolve не вызовется, это значит что создается утечка памяти
    Нет, утечки памяти не будет. Колбэк созданный в testPromise будет удален вместе с замыканием, так и не вызвавшись ни разу.
    Ответ написан
    3 комментария
  • Как создать личный сайт-портфолио на React?

    @juxifo
    todo-апп != CMS. Да, вам нужна админка.

    Общая схема: в админке есть данные о проектах, клиент их грузит через API и рендерит (можно и SSR). Делаете роут для админки, в которой нужно авторизоваться и там же редактировать контент, который (также, как и с получением, хотя в этом случае SSR кажется более лаконичным, на мой взгляд) изменяется в бд.

    Лучше всего забить да взять и сверстать статический ленд (можно и на React, но все та же статика) и разместить да хоть на том же github.io.
    Ответ написан
    Комментировать
  • Как показать прелодер на страницы до получения данных?

    @Dasslier
    FrontEnd Developer
    Идея со строкой в массиве звучит как бред.
    Запрос на сервер - асинхронная операция, вы вызываете ее из компонента и в нем же можете чейнить с помощью then
    Сделайте стейт в компоненте isLoading: false
    Перед вызовом запроса, поменяйте на true, а когда получите ответ от сервера в then/catch/finally - вырубите лоадер
    Ответ написан
    Комментировать
  • Как с помощью position fixed расположить элемент точно по центру?

    Создаете блок, в котором будет модальное окно. Задаете ему:

    .modal-wrapper {
    position:fixed;
    display:flex;
    align-items:center;
    justify-content:center;
    top:0px;
    left:0px;
    width:100vw;
    height:100vh;
    }


    <div class="modal-wrapper">
     <div class="modal">
     </div>
    </div>

    Саму модалку делаете какой хотите.
    Ответ написан
    1 комментарий
  • Зачем пишут return false в конце функции или if?

    @JohnDidact
    Нуб во всём
    Это чтобы не выполнялось основное действие… типа как переход по ссылке не прошёл, или страница не перезагрузилась при нажатии на кнопку.
    Ответ написан
    Комментировать