• Деструктуризация?

    var [] = value для массивов
    var {} = value для объектов

    ... берет весь неперечисленный остаток в указанную переменную (spread)

    Правильный код твоих вариантов:
    var [a,aa,...aaa] = [2, 4, 23];
    console.log(a, aa, aaa);

    var {a,aa,...aaa} = {a:2, aa: 4, aaa: 23};
    console.log(a, aa, aaa);
    Ответ написан
    5 комментариев
  • Возможно ли реализовать drag `n drop под IE8?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    В IE отлично работают события mousedown, mousemove, mouseup, а их достаточно для создания drag&drop.
    Раньше использовал jQuery UI https://jqueryui.com/sortable/ https://jqueryui.com/droppable/ эта либа гарантировано будет работать в старых IE
    Ответ написан
    2 комментария
  • Mobx, как передать массив?

    vahe_2000
    @vahe_2000
    если бы вы предоставили полный код...но я догадываюсь что вы хотите сделать что то вроде того
    class Sample {
        @observable myArray = [];
    
        constructor() {
            var request = new XMLHttpRequest();
            request.open("POST", "/my/url", true);
            request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
            request.send(this.myArray.toJS());
        }
    }
    let sample = new Sample();
    Ответ написан
    Комментировать
  • Redux и MobX - плюсы и минусы, когда лучше что использовать?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Сразу скажу - не использовал MobX, но если вы читаете дальше - значит интересуетесь.
    Ответ про плюсы redux для меня лично - в самом конце.
    ---
    До React, писал на angular, и еще раньше на backbone. В ангуляр разработке у меня были места, которые я для себя объяснял: ок, так работает ангуляр (дайджест там, скоуп такой хитрый и т.д.) - факт был в том, что не все было прозрачно для меня лично.

    Начал разбираться с React и переписал часть рабочего проекта на React + Flux. В целом понравилось, но немного напрягало копирование однотипного кода. Появился redux, который (это важно) решил мою проблему. Все, тут я сделал остановку. Написал еще пару внутренних проектов - понравилось. Меня не напрягает ничего. Все уместно, код читается хорошо. Если я возвращаюсь к старому проекту - я очень быстро вникаю в "как это работает" и могу приступить к решению задачи.

    В процессе работы с Redux - появился Graph QL. Клево! Опять что-то новенькое - начал разбираться, и закрыл - так как быстро въехать не получилось, и попутно мне пришла простая мысль: зачем? Меня устраивает то, как работает связка React + Redux. Поэтому, я не стал вникать в saga, и пока что не хочется вникать в MobX. Возможно, это не правильно, ведь я их даже не смотрел, но свободное время от "вникания в новую технологию" я потратил на "дебри" технологий, которые активно использую.

    Поэтому, для себя я решил - в ближайшее время сидеть ровно на стуле, не скакать по технологиям и спокойно делать одно приложение за другим. До тех пор пока не появится какое-то недовольство текущим стэком.

    Главные плюсы redux для меня:
    + Если не трогал проект больше месяца - очень легко вспомнить что к чему.
    + Я пишу код. Я не вникаю в новое, я наращиваю знания по "старому" => я пишу быстро
    + Удобно тестировать

    Когда использовать:
    - когда хотите сделать одностраничное (SPA) приложение с нуля
    - когда хотите постепенно перевести старый проект на схему: вьюха (вся страница, или какой-то блок) + API запросы
    Ответ написан
    2 комментария
  • Как и можно ли писать искусственный интеллект для игр, например plants vs zombies?

    longclaps
    @longclaps
    Можно, но не стоит разбрасываться.
    Вы уже добились некоторых успехов в искусстве лени - развивайтесь и дальше в этом направлении.
    Ответ написан
    Комментировать
  • Как динамически добавить компонент в React?

    Сделайте под это дело отдельный компонент. Никаких appChild - это реакт.

    class MyClickableComponent extends React.PureComponent {
      construct(props, context) { 
        super(props, context)
    
        this.state = {
          isOpen: false,
        }
      }
    
      handleClick = e => {
        this.setState({ isOpen: true })
      }
    
      render() {
       const { isOpen } = this.state
    
        return (
          <div>
            <div onClick={this.handleClick }>click on me</div>
            {isOpen && (
              <b>opened!</b>
            )}
          </div>
        )
      }
    }


    ReactDOM.render(
            <div>
                <Month />
                       <MyClickableComponent  />
                <Content />
            </div>,
      document.getElementById('root')
    );
    Ответ написан
    3 комментария
  • Как создать CRON запрос?

    @DuD
    Это как? Почему просто не запускать реже чем в 5 минут, ведь у вас он отработает 30 раз и встанет на некоторое время.

    Я рекомендую */24 * * * * command
    Раз в 24 минуты он будет отрабатывать, что означает что отработает 30 раз в 12 часов.
    Ответ написан
    1 комментарий
  • Можно ли отправить FormData не через ajax?

    lazalu68
    @lazalu68
    Salmon
    1. Можно просто сабмитить форму (~window.location.href = '/controller/action?data=mydata')

    2. Img GET request:
    (new Image).src = 'http://example.com/save-xml?xml=' + escape(yourXMLString)


    3. WebSocket

    4. SWF

    UPD

    5. Тот же сабмит, но multipart/form-data
    Ответ написан
    1 комментарий
  • Замыкания в JS, каким образом при замыкании выходит данный результат?

    bubandos
    @bubandos
    bash'у, javascript'ую, php'лю, css'аю, html'каю
    Ваш код равносилен этому:
    function makeAdder() {
        var x=arguments[0];
        return function() {
            var y=arguments[0];
            return x + y;
        };
    
    };


    Дальше, когда вы вызываете makeAdder(5), переменная add5 становится ссылкой на функцию function(y) {
    return x + y;
    };
    А эта функция хранит в себе значения из родительской области видимости, т.е. переменную x
    Соответственно, когда вы вызывавете add5(2), в return x + y; у вас подставляются значения 5 и 2 соответственно.
    Вот и все.
    Ответ написан
    2 комментария
  • React + Redux, как начать правильно?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Как с этим работать, чтобы не сойти с ума?

    Не торопиться, если хочется вдумчиво разобраться =)

    Первая проблема, как принять данные?

    Использовать react lifecycle hooks: в момент componentDidMount (или в componentWillMount) вызвать actionCreator (AC = создатель действия) -> в AC вы генерируете событие с типом REQUEST (которое ловит ваш редьюсер), а затем производите "ajax запрос", скажем так. В случае удачного результата - генерируете событие SUCCESS и ваш редьюсер устанавливает данные. Далее, ваш компонент формы, видит, что есть новые "props" (свойства, которые изменились в редьюсере, о которых компонент узнал, так как он приконекчен с помощью функции "connect" из библиотеки react-redux) и запускается перерендер. Вуаля, после такой кучи действий ваша форма "приняла данные".

    Конечно, если просто сделать нативный xhr запрос, кода будет гораздо меньше и все в одном файле, но это уже нужно исходить из ваших пожеланий. Если вам нужно, чтобы данные были "прогнаны" через редьюсер и оказались в store, значит "много действий". Если не нужно - просто обычный xhr запрос, либо если угодно $.ajax и установка данных в state компонента.

    Например, на onchange селекта мне нужно брать данные с него, что-то считать и выводить в какой-то инпут... какая здесь цепочка действий, и главное в каких файлах?


    Если используется redux, то цепочка следующая: на onChange селекта вызывается обработчик, то есть функция в вашем компоненте, которая вызывает AC (создатель действия, который располагается в папке actions). Далее уходит запрос на сервер. Затем с сервера приходит успешный ответ - вы генерируете событие, типа "DATA_RESPONSE_SUCCESS" и ваш редьюсер его "ловит". Итак, вы оказываетесь в третьем файле - в файле с редьюсером. Там вы манипулируете данными, так как вместе с типом события, вы так же должны были передать из action'а и данные, которые пришли с сервера. После того, как вы установите новые данные в редьюсере - начинается магия (которая заключается в том, что ваш компонент слушает изменения в объекте стора, с помощью функции connect). Ваш компонент перерендеривается и в инпуте оказываются нужные данные, так как инпут в качестве value использует, например: this.props.myNewValueFromServerAfterSelectManipulation (имя переменной, конечно, шуточное).

    Итого: вы потрогали файл компонента, файл из папки actions и файл из папки reducers.

    Супер итого:
    1) вам нужно понять, как сделать форму без redux. Как в ней с помощью this.state и методов жизненого цикла устанавливать и изменять данные в зависимости от того, что выбрал/ввел пользователь. Сделать это не сложно, если начать с туториала на официальной странице, либо заглянуть в РУ туториал здесь.

    2) вам нужно понять, почему в actions располагаются асинхронные запросы, и как при этом работает redux-thunk (а так же middlewares в общем). Почему в reducers производится только изменение данных. И самое главное, почему компонент при этом перерисовывается. Опять же, ссылки на официальные руководства уже дали. Русский перевод там не закончен, поэтому, хоть и устаревают версии библиотек, этот туториал по редуксу до сих пор актуален.

    P.S. в туториалах есть примеры с кодом
    Ответ написан
    3 комментария
  • React + Redux, как начать правильно?

    @titronfan
    https://rajdee.gitbooks.io/redux-in-russian/content/ - официальная документация на русском языке
    https://github.com/reactjs/redux/tree/master/examples - официальные примеры
    За пример с ajax из примеров можно взять папку "async". Посмотрите как там работает ajax.
    Для того, чтобы слать асинхронные запросы (ajax) сейчас сделаны специальные миддлвэры - к примеру thunk middleware. Ajax запросы там отсылаются через нативную функцию в js-e "fetch".

    Также гляньте эти посты: bogdanov-blog.ru/category/javascript/react-javascript
    Ответ написан
    Комментировать
  • Какие альтернативы можно выбрать для JavaScript?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Так как Java script это мейнтсрим

    JavaScript - это то, что будет работать в браузере у клиента. Все языки вроде CoffeeScript, ClojureScript, Dart, TypeScript и.т.д. транслируются в JavaScript. Таков мир.

    какие минусы выше перечислинных технологий относительно JS

    Не всякий JS разработчик захочет учить тот же самый Dart. В остальном - минусов особых нет, вы просто пишете на "другом" языке, а дальше система сборки за вас все делает сама.

    Какая разница между UI который можно создать на GWT и JS ?

    Никогда не использовал GWT, но возвращаясь к пункту 1 - все, что умеет JS вы в любом случае имеете в том или ином виде, следовательно разницы никакой.

    повлияет ли это на скорость загрузки станиц

    Если и повлияет, то незначительно.

    стоит ли влаживать время для изучения одного из них ?

    Стоит ли познакомиться с еще одним языком? В общем случае ответ положительный. Тем более что все эти языки достаточно простые и первое знакомство займет 2-3 дня максимум.
    Ответ написан
    Комментировать
  • Как в PhpStorm более гибко работать с фтп?

    Установите Root path какой вам нужно, а для проекта на вкладке Mappings укажите deployment path
    1c2880fb67df4c22adf9dfe837127277.png2c896b98bf444176ba77970202fff761.png
    Ответ написан
    1 комментарий
  • Как быстро отсортировать таблицу?

    @jaxel
    таблица на странице в ней около 3-х тысяч значений

    Может лучше сделать это на серверной стороне? Посчитать через SQL и вывод сделать с пагинацией?
    Ответ написан
    1 комментарий
  • Как собрать такую фиксированную функцию?

    Как верно заметил Rsa97, чтобы проверять правильную вложенность скобок, открывающие скобки надо класть на стек:

    function validBraces(text) {
        const stack = [];
    
        for (let c of text) {
            if ('([{'.includes(c)) stack.push(c);
            else if (')]}'.includes(c)) {
                if ('([{'.indexOf(stack.pop()) !== ')]}'.indexOf(c)) {
                    return false;
                }
            }
        }
        return true;
    }
    Ответ написан
    Комментировать
  • Как собрать такую фиксированную функцию?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Стек. Открывающие скобки кладутся на стек, закрывающие снимают вершину стека и проверяют на корректность пары.
    Ответ написан
    Комментировать
  • Что значат дроби в селекторе css?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    если не вдаваться в подробности то
    .container.\31 25\25   <-->   .container[class ~= "125%"]
    .container.\37 5\25    <-->   .container[class ~= "75%"]
    .container.\35 0\25    <-->   .container[class ~= "50%"]
    .container.\32 5\25    <-->   .container[class ~= "25%"]

    а если хочешь все же понять то вот stackoverflow.com/questions/27882839/what-does-con...
    p.s. а знаешь как я это нашел? погуглил первый же селектор. и первая же ссылка это выдала)
    Ответ написан
    1 комментарий
  • Какой принцип работы функции?

    mudrenokanton
    @mudrenokanton
    frontend dev
    По сути весь этот костыль ничем не отличается от:
    function construct(Class, name) {
      return new Class(name);
    }

    Но автор стал заложником абсолютно глупой идеи написать функцию construct, которая бы принимала не жестко закодированный аргумент. Потому он взял функцию Class и вызвал ее метод bind() через call(), для того что бы не перечислять аргументы через запятую, а просто указать их массивом. Эта функция bind вернула тело функции, которое потом и было вызвано в качестве конструктора с new
    Ответ написан
    4 комментария
  • Как обернуть тэгами код в phpstorm?

    pashted
    @pashted
    тыжпрограммист
    8afb701e3ecd40ebaa1a7a7ff6848346.jpg
    1ce4c9b40860494583405ac3e4d40431.jpg
    fc9cabd758a2476ab3e6f681f98a5f13.jpg

    если, вдруг, понадобилось вернуть всё обратно, в голову приходит только такой вариант:
    77a4085493184bc5beed76844a05ffac.jpg
    чтобы не удалить случайно что-то лишнее, шаблон можно дополнить какими-то символами, вроде воскл знаков.

    обратите внимание на подчеркивания в меню ctrl+alt+j. если нажать на клавиатуре первую букву аббревиатуры шаблона, будет применён конкретный шаблон из списка. так что название выбирайте так, чтобы было удобно нажимать его первую букву.
    Ответ написан
    3 комментария