• Как лучше написать Reducer и Action в данной ситуации?

    Zatmil
    @Zatmil
    Fullstack-разработчик
    DarthJS, В любом случае у редьюсеров будут свои наименования в стейте. Если в action.data приходит объект такого вида { cats: [], dogs: [], ... }, то я бы так сделал.

    const initialState = {
      cats: [],
      dogs: [],
      hozyiny: []
    }
    
    const reducer = (state = initialState, action) => {
      switch(action.type) {
        case LOAD_ALL_DATA: {
          const { cats, dogs, hozyiny } = action.data;
          return Object.assign({}, state, { cats, dogs, hozyiny })
        }
        default:
          return state
      }
    }
    Ответ написан
    3 комментария
  • Как лучше написать Reducer и Action в данной ситуации?

    BugsCreator
    @BugsCreator
    make it work then make it better
    Если я правильно понял вопрос
    В reducer:
    case 'LOAD_ALL_DATA':
      return {
      ...state,
      cats: action.cats,
      dogs: action.dogs,
      hozyiny: action.hozyiny
      }

    В action:
    export const loadAllData = (response) => { 
      return {
        type: 'LOAD_ALL_DATA',
        cats: response.cats,
        dogs: response.dogs,
        hozyiny: response.hozyiny
      }};

    Сам стор в редьюсере:
    state: {
      cats: [],
      dogs: [],
      hozyiny: [],
    }
    Ответ написан
    3 комментария
  • Есть ли сайт идей, где можно приложить свои умения в области web программирования?

    @asd111
    Могу предложить сферы где есть проблемы с софтом.
    Сельское хозяйство - подсчет сколько вырастет, как растет, где лучше земля, куча машин лёрнинга и огромный потенциал.
    Электроэнергетика и другая энергетика. Всё просто. Считаем как эффективнее расходовать электричество, газ, топливо, воду в частных домах, на производствах и т.п.. Тут я полный ноль, но есть стартапы и там много денег, потому что на электричестве и энергетике всегда можно заработать.
    Нормальный сайт объявлений, ориентированный на США. Craiglist полное г если вы не видели, но он самый популярный. Соответственно если сделать avito для США, то можно хорошо заработать, только нужны деньги на рекламу. И на рекламу уйдет больше чем на сам проект.

    По поводу идей советую читать бизнес сайты. Там часто обсуждают новые идеи в области IT бизнеса. Часто бывают такие статьи www.businessinsider.com/top-hot-startups-to-launch...
    Ответ написан
    1 комментарий
  • Какой ноутбук выбрать? На Ubuntu Linux или OS X?

    Я сам linux-админ, и пользуюсь Ubuntu с 2007 года. Но пару недель назад перешел на MacOS. Могу сразу сказать - сам макбук, его приятно держать в руках, на коленях, он даже приятнее на ощупь. Получаешь некоторое удовольствие от пользования такой вещью, и при этом она не отвлекает. Все пластиковые ноуты кажутся какой-то доской по сравнению с макбуком. Операционка приятная в поведении, но к ней я привыкал дня 4. Это то, что касается GUI.

    Консоль в макоси я не кастомизировал, только поставил fish и brew, но мне в ней не хватает многого, стандартных утилит GNU Coreutils, я понимаю, это все можно поставить, настроить, кастомизировать, но первое впечатление от работы с консолью - неприятные.

    Вообще конечно, обе руки "за" макбук, и выбирать нечего.
    Ответ написан
    Комментировать
  • Как контролировать число одновременных вызовов асинхронных функций в очереди?

    rockon404
    @rockon404
    Frontend Developer
    function Parallel(settings) {
      this.parallelJobs = settings.parallelJobs;
      this.results;
      this.tasks = [];
      this.onDone;
      this.index = 0;
      this.activeJobs = 0;
    };
    
    Parallel.prototype.start = function() {
      this.results = Array(this.tasks.length);
    
      for (var i = 0; i < Math.min(this.parallelJobs, this.tasks.length); i++) {
        this.next();
      }
    }
    
    Parallel.prototype.next = function(result) {
      var index = this.index;
      this.activeJobs++;
    
    
      this.tasks[this.index](function(result) {
        this.onResult(result, index);
      }.bind(this));
    
      this.index++;
    }
    
    Parallel.prototype.onResult = function(result, index) {
      this.results[index] = result;
      this.activeJobs--;
    
      if(this.tasks[this.index]) {
        this.next();
      } else if (this.activeJobs === 0) {
        this.onDone(this.results);
      }
    }
    
    Parallel.prototype.job = function (step) {
      this.tasks.push(step);
      return this;
    };
    
    Parallel.prototype.done = function (onDone) {
      this.onDone = onDone;
      this.start();
    };
    
    
    
    function asyncRequest1(result) {  
         setTimeout(result, 2000, 'data');
    }
    
    function asyncRequest2(result) {  
         setTimeout(result, 2000, 'data 2');
    }
    
    function asyncRequest3(result) {  
         setTimeout(result, 2000, 'data3');
    }
    
    function asynRequest4(result) {  
         setTimeout(result, 2000, 'data4');
    }
    
    
    
    var runner = new Parallel({
      parallelJobs: 2
    });
    
    runner.job(asyncRequest1)
          .job(asyncRequest2)
          .job(asyncRequest3)
          .job(asyncRequest4)
          .done(function (results) {
             console.log(results); 
          });
    Ответ написан
    3 комментария
  • Как правильно дождаться результата асинхронных функций в цепочке вызовов?

    rockon404
    @rockon404
    Frontend Developer
    Можно так:
    class Foo {
      constructor() {
        this.queue = [];
      }
    
      tick(cb) {
        this.queue.push(cb);
        return this;
      }
    
      then(cb) {
        return this.queue.reduce((acc, fn) =>
          acc.then(fn), Promise.resolve()).then(cb);
      }
    }


    Вариант в прототипном стиле:
    function Foo() {
      this.queue = [];
    }
    
    Foo.prototype.tick = function(cb) {
      this.queue.push(cb);
      return this;
    }
    
    Foo.prototype.then = function(cb) {
      return this.queue.reduce(function(acc, fn) {
        return acc.then(fn);
      }, Promise.resolve()).then(cb);
    }


    Пример использования:
    const foo = new Foo();
    
    const task1 = () =>
      new Promise(resolve => {
        setTimeout(() => {
          console.log('task1');
          resolve('Done!');
        }, 1000);
      });
    
    const task2 = arg =>
      new Promise(resolve => {
        setTimeout(() => {
          console.log('task2');
          resolve(arg);
        }, 1000);
      });
    
    foo.tick(task1)
       .tick(task2)
       .then(console.log);
    
    /* result:
    
        task1
        task2
        Done!
    
    */
    Ответ написан
    Комментировать
  • Как исправить unknown property 'plugins' при запуске Webpack?

    Проблема здесь
    {
    	exclude: /\/node_modules/,
    	loader: "babel-loaderd",
    	query: {
    		presets: ['es2015-webpack', 'stage-0', 'react']
    	},
    	plugins: ['transform-runtime'],
    },


    Надо так
    {
    	exclude: /\/node_modules/,
    	loader: "babel-loader",
    	options: {
    		presets: ['es2015-webpack', 'stage-0', 'react'],
    		plugins: ['transform-runtime']
    	}
    },
    Ответ написан
    Комментировать
  • Хорошая ли практика загружать все данные сразу?

    gadfi
    @gadfi
    https://gamega.org
    зависит от многих вещей, но прям все грузить явно плохо
    да количестов не прочитанных сообщений и последнии сообщения чтобы в списке бесед их можно было показать
    нет реально всю бд - хотя бы за пол года даже в одной беседе столько данных ...
    Ответ написан
    Комментировать
  • Оправдано ли будет использование NodeJS в качестве бэкенда крупного приложения?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Paypal и Netflix используют Node.js. У обоих нагрузки очень даже приличные.
    В плане масштабируемости думайте об архитектуре. Можно и на perl написать приложение, которое за секунду будет обслуживать миллион клиентов.
    Node.js будет прекрасно работать в качестве движка для типичного веб-приложения вроде магазина, чата или CRM. Если у вас очень много компонентов, например тысячи, логичнее приложение разбить на модули и сделать вместо одного приложения несколько, которые можно запускать по-отдельности (здесь уместно упоминание микросервисной архитектуры). Разумеется запросы нужно распределять с помощью балансировщика.
    Есть еще такая вот штука https://serverless.com/ - ее можно масштабировать практически до бесконечности. Были бы деньги.
    Node.js будет плохо работать в области процессинга данных, например генерация картинок, потоковая обработка видео, нейронные сети и т.д. Здесь лидеры C, C++, Go, Rust, Java.
    Можно даже создать гибридное приложение - большую часть выполнить на Node.js, а критичную по производительности на другом языке. Например генерация миллиона прайсов в сутки в старый xls или векторный pdf, упаковка в архив и рассылка - не самая лучшая идея для Node..JS. То же C++ здесь будет вне конкуренции.
    Ответ написан
    19 комментариев
  • В чем целесообразность использования SPA, если контент в них не индексируется?

    ASP чаще всего и используются в приложениях, которым не нужно индексировать контент, например:
    Gmail - он реализован как SPA, согласны, что содержимое мыльников никто искать не будет, так?
    Admin Panel - согласны что индексировать админ панель незачем?
    REST api - визуальный интерфейс, согласны, что индексация страниц не нужна?
    Какой-то закрытый ресурс компании, тоже не индексируется.

    В чем плюс использования. SPA приложение на том же Angular сделать быстрее и проще, чем расширять большой и громоздкий функционал на сервере через PHP, Java, C#.
    Во вторых это работа с разными устройствами и под разными устройствами это не только моб. планшеты и компы, а и инженерные программные модули(покрайней мере так пишут в вики).
    Значительно меньше нагрузка на серв и больше на клиент т.к. грузит оно все разом и чаще всего работает асинхронно. Обновляя исключительно контент, а не все страницы целиком.
    Ответ написан
    2 комментария
  • Как в React перерендерить компонент (popup), который вызывается функцией?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Один из вариантов:
    Вам нужно отрисовать компонент Popup внутри вашего родителя, и у Попапа сделать атрибут isVisible, который менять в state родителя.
    Таким образом, когда придут новые данные вы можете просто setState вызвать и показать попап.
    Ответ написан
    2 комментария
  • React. Как сохранить тип number в значении option?

    alvvi
    @alvvi
    export default apathy;
    Что мешает просто сделать
    const n = Number(event.target.value);
    ?
    Ответ написан
    8 комментариев
  • React. Как сохранить тип number в значении option?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    Никак. В аттрибутах все значения сохраняются как строки.

    Потому я бы советовал для разных типов данных в инпуте держать разные обработчики. Ну или там на isNaN проверки делать.

    ...
    const number = isNaN(+value) ? value : +value;
    ...
    Ответ написан
    Комментировать
  • Как поставить драйвера на клавиши FN и другие драйвера на ASUS ROG Ubuntu?

    x67
    @x67
    Если вы ставите сложность вопросу "Senior", то ответ, очевидно - написать самому
    Тачпад должен работать из коробки. Поищите информацию на сайте производителя тачпада (Synaptics и тп)
    Видео - убунта сама ставит свободные драйвера, чтобы можно было работать. Для игор вам нужны проприетарные драйвера, если они имеются и поддерживаются. Заходите в Настройки->Программы и обновления, там выбираете нужные. Или идете на сайт amd/nvidia и качаете там, ставите сами.
    На fn+ сочетания наверняка есть утилита для вашего ноута. Если нет, то ставьте другие сочетания вместо fn и привыкайте
    Ответ написан
    1 комментарий
  • Как забрать innerHTML React элемента по ref?

    const testElementHtml = this.TestElement.parentNode.innerHTML

    Но в этом случае будет получен HTML всех дочерних элементов родительской ноды
    Если помимо этого div'а есть еще дочерние элементы, то так:
    const testElementClone = this.TestElement.cloneNode(true)
    const wrap = document.createElement('div')
    wrap.appendChild(testElementClone)
    const testElementHtml = wrap.innerHTML
    Ответ написан
    4 комментария
  • Как в React сделать внутренний component position:absolute к корневому app?

    Так а причем тут React, если проблема c CSS?
    position:absolute задаётся относительно ТОЛЬКО парент компонента

    Нет, «position: absolute» задаётся относительно родителя, только если у родителя значение свойства position равно fixed, absolute или relative, то есть не static.
    Ответ написан
    2 комментария
  • Как сделать border?

    LenovoId
    @LenovoId
    svg, css,js
    два прямоугольника
    .......... у верхнего border-bottom:none;
    .......... у нижнего border-top:none;
    Ответ написан
    9 комментариев
  • Какую архитектуру выбрать для приложения типа Chat, Slack?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Подскажу ответ только на 1й вопрос: Redux удобнее чем простой Flux, как по мне. У flux нужно много чего держать в голове... что куда подписано и тд тп. А у Redux - store один и этим удобно.

    Ну и докучи закину еще 0.5 на второй.. Реакт-роутер в контексте (следовательно в пропсах) прокидывает много полезной информации. Просто поставьте его, и посмотрите что он передает в компоненты. На основе этих данных сможете сделать выбор, нужен вам он или нет.
    Ответ написан
    1 комментарий
  • Чем WebSocket в php отличается от того же в js?

    iMukcep
    @iMukcep
    Вопрос задан крайне некорректно. WebSocket - это протокол передачи данных, который работает поверх TCP. Есть WS-клиент, и есть WS-сервер, к которому подключаются клиенты.

    Далее, по теме вопроса: Клиент можно написать на чём угодно, хоть на php (при большом желании), хоть на js (на js на это уходит пару строк кода). Так что можно сказать одно - отличие разве что в реализации, ну и осмысленностью действий, ибо никогда не сталкивался с необходимостью писать клиент на PHP.

    И да, на последок: писать WS-сервер на php - заведомо гиблое дело, сам с этим сталкивался. Пришлось в итоге искать альтернативы в виде Python'a и NoneJS.

    Поправьте, если где ошибся.

    UPD:
    Ссылки:
    https://ru.wikipedia.org/wiki/WebSocket
    https://learn.javascript.ru/websockets
    https://habrahabr.ru/post/209864/
    https://github.com/varspool/Wrench
    Ответ написан
  • Как связать Vue.js с php?

    nexmean
    @nexmean
    погромист
    >Или лучше связать front с backend через ajax запросы к api?
    This.
    Ответ написан
    Комментировать