Задать вопрос
  • Нужно ли React.js разработчику уметь отлично верстать сайты?

    @AlexCraft
    Yustas Alexu, значит используйте что-то другое, если этот инструмент не подходит. Если смотреть на сопоставимый уровень задач, решаемых Vue, то никто не мешает использовать React или Angular или ECMAScript в чистом виде. Не хватает типизации - юзайте TypeScript. О том и речь.
  • Нужно ли React.js разработчику уметь отлично верстать сайты?

    @AlexCraft
    Посмотрите на мир глазами инженера, а не React или Vue или Angular -разработчика. Думайте как инженер, software engineer, посмотрите на фреймворки, на html, css как на технологии, решающие задачи. Мир станет сложнее, но в то же время понятнее.
  • Почему Redux так популярен?

    @AlexCraft
    Предвижу вопрос про 'отдельные части проекта' - можно (и нужно) использовать и глобальный стейт, для этого создайте в папочке context соответствующий раздел App и туда выносите всё что будет работать для всего приложения (isLoading, error и т.д.). Ну и вот как раз этот стейт придется передавать в App.js и оборачивать там. Но это одна обёрточка, и она особо не замусорит там ничего.
  • Почему Redux так популярен?

    @AlexCraft
    Решение очень похожее на предложенное Sergiu Mitu, за исключением того, что для передачи состояния оборачивается не весь App, а только отдельные Rout-ы в routes.js. Создаем state, reducers, context для отдельных частей проекта (Articles, Documents, например) и через отдельные роуты передаем State (контекст и редьюсеры тоже работают через State).

    Вот такой примерно получается файл routes.js:

    // тут импорты всего нужного - React, Switch, Route
    // + импорты компонентов для маршрутов
    // + импорт State-ов для разных частей нашего проекта (в нашем конкретном случае это ArticlesState)
    
    // дальше нам понадобится вот такой примерно массив (он может понадобиться не только здесь, 
    // поэтому экспортируем его)
    
    export const routes = [
      {
        path: '/articles',
        Component: Articles,
        name: 'Статьи',
        exact: true
      },
      //... и т.д.
    ]
    
    // при помощи метода .map генерируем маршруты:
    
    const Routes = () => {
      return (
        <Switch>
          {routes.map(({ path, Component, exact }, key) => (
            <Route
              path={path}
              key={key}
              exact={exact}
              render={props => {
    
                /* тут могут передаваться разные полезные штуки */
    
                /* возвращаем компонент, и если надо - передаем ему состояние, и всё, */
                /* больше никаких оберток не надо, ни в App.js, ни внутри компонентов */
    
                return Component === Articles || Component === Article ? (
                  <ArticlesState>
                    <Component {...props} />
                  </ArticlesState>
                ) : (
                  <Component {...props} />
                )
              }}
            />
          ))}
        </Switch>
      )
    }
    export default Routes

    На первый взгляд похоже на костыль, но, друзья мои, Context API - это не костыль, это очень мощное решение, оно будет развиваться и поддерживаться в дальнейшем. Основной профит от этого всего то, что мы применяем функциональный подход к разработке, что в свою очередь позволяет на полную мощь юзать React Hooks. О преимуществах функционального подхода и React Hooks почитайте в документации React ). Конечно же, основное - это устранение "ада оберток" и очень удобная и понятная архитектура проекта. P.S.: надеюсь, что это кому-то из вас поможет и, может быть, будет полезным.
  • Куда писать "обычные" скрипты во Vue js?

    @AlexCraft
    Во Vue важно понять как работать с асинхронными данными. Если данные получаете через async await (или как-то еще асинхронно) и потом используете их где-то в компоненте, то обязательно в самом корневом элементе этого компонента (следующим за template) поставить v-if="asyncData". AsyncData - это мое название, в данном примере имеются в виду вообще любые данные, получаемые асинхронно. Это значит, что компонент не отрендерится в DOM-дерево, пока не придут асинхронные данные (asyncData в данном примере). Пока я это не понял, не мог нормально работать с Vue. Это важно практически везде - при получении данных из API, при обработке JSON локально, да вообще при обработке данных (даже если вы ждёте результат обработки какого-то метода). Поймёте асинхру, и всё, все двери откроются, получите левелап! )))
  • Как обратиться к объекту?

    @AlexCraft
    Во Vue, если получаешь данные асинхронно, есть нюанс. Последовательность такая: получаем данные в store.actions при помощи fetch или axios, потом в state пишем пустой объект: appData: {}, создаем мутацию setData, далее диспатч в корневой компонент. Потом в геттерах деструктурируем appData. После этого в компоненте, используя ...mapState и ...mapGetters импортируем геттеры и стэйт. В конце надо не забываем повесить v-if на div, в котором получаем данные.
  • Как правильно построить архитектуру приложения Vue?

    @AlexCraft
    bristl, да, конечно, обновил свой профиль на Тостере, теперь там должно быть видно мою почту.
  • Как правильно построить архитектуру приложения Vue?

    @AlexCraft
    По поводу интернет-магазина. Есть очень достойный видеокурс: "React Node FullStack - Ecommerce с нуля до развертывания". Ссылки не выкладываю, чтобы не рекламировать, гуглите по названию. Там проект на React, но я его реализовывал через Vue.js. Очень неплохо структура приложения раскрыта, полезно будет для любого ecommerce проекта, особенно учебного.
  • Как правильно построить архитектуру приложения Vue?

    @AlexCraft
    Ну, если так обозначить задачу, то я бы предложил исходить из следующего: Vue дает возможность очень удобно масштабироваться от начальной структуры приложения. Первые компоненты вы можете сделать в зависимости от функций, которые Вам нужны. Например: карточка товара, список товаров, чекаут ... ну и т.п. А потом, когда возникнет необходимость, можно разбивать эти компоненты, вы ничего не потеряете. Доходить до того, что на каждый инпут будет отдельный компонент не надо, но бывает надо выделить например иконки и счётчики социальных сетей в отдельный компонент ... ещё какие-то вещи. Тут простор для творчества )
  • Как правильно построить архитектуру приложения Vue?

    @AlexCraft
    localstorage браузера находится на клиенте ) А если нужно хранить данные о покупках, статистику ... в конце концов если покупатель захочет сделать возврат ... я вот про это всё. Не табличку же в гугл таблицах вести ...
  • Как правильно построить архитектуру приложения Vue?

    @AlexCraft
    Может неправильно описал ситуацию. Вы же собираетесь как-то обрабатывать заказы? Хранить данные? Все изменения, которые произойдут с условной переменной X, записанной Вами в State так и останутся на клиенте. Почитайте про клиент-серверную архитектуру приложения. Без этого ecommerce приложение не построить.