• Как послать данные на сервер из формы в виде json?

    rockon404
    @rockon404 Куратор тега React
    bpGusar, вы бы почитали
    https://reactjs.org/docs/forms.html#controlled-com...
    https://reactjs.org/docs/uncontrolled-components.html
    да и подумали хотя бы о таком вопросе, как валидация данных на стороне клиента.
    Для отправки данных отлично подходит библиотека axios, которая избавляет от необходимости делать многие вещи, вроде вызовов JSON.stringify() и основана на Promise.
  • Как послать данные на сервер из формы в виде json?

    rockon404
    @rockon404 Куратор тега React
    Это нативное решение. В вопросе React. Странно, что автору оно подошло.
  • Как наверстать знания в javascript?

    WebDev, да тут стандартный расклад, в основном это: webpack + babel + eslint + typestript/flow + react/vue/angular. Для организации хранения состояния приложения используют Flux архитектуру, отличная ее реализация Redux. Еще приложения все чаще пишут изоморфными. Почитайте об этом.

    Со времен Backbone фронтенд изменился до неузнаваемости. Сам когда-то на нем писал.
  • Как наверстать знания в javascript?

    Для начала вам, определенно, стоит научиться пользоваться поисковиком. Там и статьи об эволюции frontend фреймворков есть, и о современной сборке проектов, и о статической типизации.
  • Разработка электронно-образовательной среды для суза?

    drm095, искренне сочувствую вашему заказчику. Для вас это, конечно, будет хороший опыт, если осилите.
    Я бы вам, что-то подобное писать самому, учитывая ваш вопрос насчет ООП, не доверил. Он хорошо показывает, что вы в современной фронтенд и бэкенд разработке вообще ничего не понимаете, а значит о сложности, тонкостях и времени реализации проекта за который беретесь даже размытого представления не имеете.
    Пока складывается впечатление, что вы его либо угробите, либо породите бажный, дырявый и неподдерживаемый набор костылей.
  • Как вы боретесь со слабой типизацией и зачем ее придумали?

    Алексей Николаев, то что вы перечислили, это простые истины которые являются стандартом в современных проектах, кроме, пожалуй, геттеров и сеттеров, по крайней мере в React разработке, в большинстве кейсов в их использовании нет особого смысла, если вы не пишите библиотеки.
    Соблюдение перечисленных вами правил, никак не избавляет от необходимости использовать статическую типизацию в больших коммерческих проектах. Это вам скажет любой инсайдер. И дело тут вовсе не во внимательности.
    Вам стоит ощутить скорость входа в проект и скорость разработки в большой команде и большом проекте со статической типизацией. Тогда вы поймете о чем речь.
  • Как вы боретесь со слабой типизацией и зачем ее придумали?

    Ну это вы наслаждаетесь до поры до времени, пока не пришли работать в огромное веб-приложение, в команду на 10 фронтендеров, которые еще и могут переодически меняться. В таких проектах, которые помимо того, что написать, надо еще поддерживать и масштабировать, использование сложных типов вроде такого:
    type Property = {
      id: string,
      name: string,
      type: number,
      participants: Participant[], 
      isDirect: boolean,
      householdId?: number,
    }

    необходимость.
  • Как правильно построить логику для поиска по массивам?

    PHPjedi, совсем забыл про случай если в первом массиве не будет элементов. Поправил ответ!
  • Нужно ли писать в классе элемент и модификатор вместе по БЭМ?

    Senseich, ну мне вообще пришлось VPN десктопный покупать для работы, так как сервера нашего сервиса в облаке Amazon лежат. Такие дела) Даже JSFiddle без VPN недоступен.
  • Нужно ли писать в классе элемент и модификатор вместе по БЭМ?

    Senseich, у меня только через VPN открывает. Провайдер TTK. Это все происки Роскомнадозора
  • Как быстро отрисовывать таблицу с 10.000-ми строк?

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

    rockon404
    @rockon404 Куратор тега React
    bpGusar, Вот эта конструкция сама по себе нелогична:
    this.state.arrResult = [];
    for (let i = 0; i < data.results.length; i++) {
      this.setState({
        arrResult: [...this.state.arrResult, data.results[i].title]
      });
    }

    Вы сначала в обход API React подменяете ссылку на массив, что по-хорошему делать нельзя.
    А потом зачем то выполняете проход по массиву и каждую итерацию вызываете setState заставляя компонент выполнить обновление.
    Более того вы еще и пишите в массив только title.
    Вот исправленный вариант:
    searchMovie = async () => {
      const searchQuery = document.getElementById("movieName").value;
      const { results } = await fetch(`https://api.themoviedb.org/3/search/movieapi_key=${API_KEY}&language=ru-RU&query=${searchQuery}&include_adult=true`)
        .then(res => res.json());
            
      this.setState({ arrResult: results });
    };

    Подтяните основы JavaScript.
  • Почему возникает Actions must be plain objects без ReduxThunk?

    rockon404
    @rockon404 Куратор тега React
    Nikita Shchypylov, нет почему, у вас же перехватывается только async action, а объекты идут на следующий middleware если он есть и далее попадают в редьюсеры.
    В примере с:
    export const asyncAction = (...someArgs) => async dispatch => {
      const res = await someAsyncCall(...someArgs);
      dispatch({ type: SOME_ACTION_TYPE, payload: res });
    
      return res;
    };


    на вход попадает функция:
    async dispatch => {
      const res = await someAsyncCall(...someArgs);
      dispatch({ type: SOME_ACTION_TYPE, payload: res });
    
      return res;
    };


    И строку return action(dispatch, getState, extraArgument); можно привести к виду:
    return (async dispatch => {
      const res = await someAsyncCall(...someArgs);
      dispatch({ type: SOME_ACTION_TYPE, payload: res });
    
      return res;
    })(dispatch, getState, extraArgument);

    Где значение ...someArgs уже передано и берется из замыкания или не передано и undefined.
  • Почему возникает Actions must be plain objects без ReduxThunk?

    rockon404
    @rockon404 Куратор тега React
    1. redux-thunk не резолвит промисы, он просто возвращает вам результат вызова асинхронной функции, которую вы ему передаете, та самая строчка:
    return action(dispatch, getState, extraArgument);
    И если там есть асинхронный вызов(запрос к серверу, например), то промис возвращается еще не зарезолвеный и чтобы выполнить код именно тогда, когда он будет зарезолвен используется метод then.
    2. Вы немного не поняли суть. Вы совершаете вызов:
    this.props.myAc("data"));
    это аналогично:
    dispatch(myAc('data'));
    или:
    dispatch(async dispatch => { ... });
    Теперь возвращаемся к строке:
    return action(dispatch, getState, extraArgument);
    Ее в нашем случае можно заменить на вызов:
    return (async dispatch => { ... })(dispatch, getState, extraArgument);

    Наша функция обрабатывает только первый аргумент, но туда еще передается метод getState и опциональный extraArgument, если он был передан при инициализации redux-thunk.

    Строка:
    return action(dispatch, getState, extraArgument);
    это всего лишь вызов функции которую возвращает ваш async action.
    3. Все верно стрелочные функции в короткой форме возвращают значение:
    const test = () => 'test';
    
    const foo = func => func();
    
    console.log(foo(test)); // test


    Но в такой записи значение не возвращается:

    const test = () => 'test';
    
    const bar = func => {
       func();
    }
    
    console.log(bar(test)); // undefined


    В случае с асинхронными функциями они всегда возвращают Promise, даже если в них нет return. В таком случае Promise вернет по резолву undefined:
    const foo = async () => {
      await someDelay();
    };
    
    // undefined по резолву(окончанию вызова  someDelay())
    foo().then(result => console.log(result));
  • Почему возникает Actions must be plain objects без ReduxThunk?

    rockon404
    @rockon404 Куратор тега React
    Nikita Shchypylov, во-первых функция test у вас никак не используется, так как в функции final test это аргумент возвращаемой ей функции и он никак не связан с функцией test.
    Смотрите как это работает:
    Сохраним вызов final в переменную foo:
    const final = (arg) => test => {
      test(arg)
    }
    
    const foo = final("test");

    Теперь foo присвоен результат вызова final, это функция:
    test => {
      test("test");
    }

    Аргумент arg принял значение "test" и только теперь можно использовать аргумент test.
    Куда можно передать скажем console.log:
    foo(console.log); // вывод в консоль: "foo"

    Банальный пример:
    const one = x => y => z => x + y + z ;
    const two = one(5);

    Значение two:
    y => z => 5 + y + z ;
    Далее:
    const three = two(10);
    Значение three:
    z => 5 + 10 + z ;
    Вот у нас и вернулась функция, которая возвращает значение из двойного замыкания:
    console.log(three(20)); // 35

    Как то так.

    Что до dispatch, то когда вы предаете в dispatch свой async action вы делаете такой вызов:
    dispatch(asyncAction());

    В сам dispatch приходит такая функция:
    async dispatch => {
      const res = await someAsyncCall(...someArgs);
      dispatch({ type: SOME_ACTION_TYPE, payload: res });
    
      return res;
    };


    Которую перехватывает redux-thunk и возвращает вам обратно результат ее вызова передав на вход функцию dispatch и еще два аргумента:
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }

    action это ваша функция.

    Надеюсь, теперь стало понятней. Спрашивайте если, остались вопросы.

    Вот еще. Важно понимать отличие:
    const foo = test => {
      test("test");
    }

    и
    const bar = test => test("test");
    Второй вариант в полной записи выглядит так:
    const bar = test => {
      return test("test");
    }

    и как видно он возвращает значение функции аргумента, в отличии от первого варианта, который ничего не возвращает.
  • Что почитать для «посредственного» js разработчика?

    Максим, можно начать с этого. У многих людей правда с этим проблемы, без шуток. =)
  • Почему такой результат выполнения кода?

    iBird Rose, массив является потомком объекта. В JavaScript нет понятия "обычный массив". Массив в JavaScript это объект у которого есть специальные поля и методы. Отображается в строках он по-другому только потому, что у него переопределен метод toString.
  • Как правильно составить резюме если нет опыта работы?

    DevMan, это ваше субъективное отношение и восприятие. По поводу HR, всегда будут люди которые будут писать не по делу.
    Именно, зарплатные ожидания отражают мои хотелки. Лично я не имею дел с компаниями, которые не готовы в полной мере их удовлетворить. А оффлайн резюме не помню сколько лет назад последний раз видел, как и не помню когда последний раз бегал пешком куда-то его подавать. В цифровую эру все-таки живем.
    Что сказать, разные люди, разные взгляды. Я использую зарплатные ожидания в профилях и резюме, и это отлично работает для меня. У вас вижу другие методы.
    Скажу, что деструктивно утверждать для всех, что это "бред", все-таки не правильно. Тем более, что этот пункт сейчас присутствует в формах всех популярных сервисов.
  • Как правильно составить резюме если нет опыта работы?

    DevMan, вы забыли вступление вроде "По моему сугубо субъективному, никак не претендующему на истину скромному мнению... ". Зарплатные ожидания и ЗП это разные вещи.
    Благодаря этому, как вы говорите "бреду" мне когда я рассматриваю предложения предлагают только от той суммы которую прошу, в основном больше. Остальные просто идут мимо и не беспокоят.
    Вы, конечно, живите как живете.