Ответы пользователя по тегу JavaScript
  • Как правильно подтягивать данные и хранить их при переходе на страницу товара?

    @romaro
    Попробуйте посмотреть на MobX, если вам близок ООП-подход. Стейт вашей страницы товара можно оформить в виде отдельного класса, который передается в пропс компонента-обертки вашей страницы и все вложенные компоненты могут быть так же завязаны на этот стейт. При переходе на другую страницу выполняете новый запрос и обновляете поля этого класса, которые помечены как отслеживаемые для библиотеки MobX.

    Вот здесь есть примеры кода.
    Ответ написан
    Комментировать
  • Как правильно подключить модуль с TS?

    @romaro
    Попробуйте в tsconfig указать:
    {
        "compilerOptions": {
            "module": "ESNext"
        }
    }


    https://www.typescriptlang.org/tsconfig#module

    Или вызвать tsc --module esnext index.ts
    Ответ написан
    Комментировать
  • Как замапить массив?

    @romaro
    Только вам нужно будет каждый key отдельно прописать:

    items[0]['pizzas'].map((obj) => <PizzaBlock key={ obj.title } { ...obj } />)


    https://playcode.io/903034
    Ответ написан
  • Что изучать первым после JS, TypeScript или React?

    @romaro
    Мне кажется, TypeScript, т.к. он помогает провести ревизию знаний JS. И с Реактом потом будет проще. Ну и если заинтересует разработка под .NET, на C# будет комфортнее переходить при хорошем понимании TS.
    Ответ написан
    Комментировать
  • Как проверить наличие файла в проекте, если он находится в другом контейнере docker?

    @romaro
    У контейнеров ведь обособленные файловые системы, т.е. они могут общаться между собой через docker-network. Вам по идее нужно реализовать в контейнере бекенда API наличия картинки и дергать его из второго контейнера.

    Или выносить общие для контейнеров ресурсы на хостовую машину и монтировать директорию с этими ресурсами в оба контейнера. Тогда у них будет общая файловая система.
    Ответ написан
    1 комментарий
  • Как преобразовать HTML-строку в Element?

    @romaro Автор вопроса
    По невнимательности использовал this.el.lastChild вместо lastElementChild. Свойство lastChild открывает доступ к инстансу класса Node, который не может быть передан в метод observe(), там ожидается element.
    Ответ написан
    Комментировать
  • Можно ли настроить Вебпак на выборочное подключение скриптов?

    @romaro Автор вопроса
    Вроде бы смог решить свою задачу при помощи плагина html-webpack-injector и настройки чанок. Пример кода:
    const testArr2 = [
        new HtmlWebpackPlugin({
            template: `./templates/pages/test.ejs`,
            filename: `./views/test.njk`,
            chunks: ['index', 'chunk1']
        }),
        new HtmlWebpackInjector(),
        new HtmlWebpackPlugin({
            template: `./templates/pages/test2.ejs`,
            filename: `./views/test2.njk`,
            chunks: ['index', 'chunk2']
        }),
        new HtmlWebpackInjector()
    ]
    
    export default {
        context: path.resolve(__dirname, 'source'),
        entry: {
            index: './entry.js',
            chunk1: './templates/pages/chunk1.js',
            chunk2: './templates/pages/chunk2.js'
        },
        output: {
            filename: '[name].bundle.js',
            path: path.resolve(__dirname, 'public'),
        },
        plugins: [
            new CleanWebpackPlugin(),
            new MiniCssExtractPlugin({
                filename: 'style.css'
            }),
            ...testArr2
    < some code >


    Осталась только проблема с минификацией: у каждого файла собственное пространство имен и, как следствие, из чанок я не могу сослаться на классы в основном бандле. Но как я понимаю, это особенность работы лоудеров вебпака: они обрабатывают файлы по отдельности и не объединяют их в общий пул.

    В связи с этим вопрос по минификации: как запретить лоудеру бабеля (babel-loader) менять названия идентификаторов в коде при компиляции в режиме production? Как я понимаю, это единственный выход.

    Попробовал применить в настройках, не помогло:
    {
                    test: /\.m?js$/,
                    exclude: /(node_modules|bower_components)/,
                    use: {
                        loader: 'babel-loader',
                        options: {
                            minified: false
                        }
                    }
                },
    Ответ написан
    Комментировать