Задать вопрос
Ответы пользователя по тегу React
  • Есть Route но они не совмем так работают как нужно?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    https://www.robinwieruch.de/react-router-nested-routes
    https://www.positronx.io/react-js-nested-routes-us...
    import {BrowserRouter as Router, Routes, Route, Navigate} from 'react-router-dom';
    
    function App() {
      const {getUser, user, setUser} = useUser();
    
      return (
        <Router>
          <Routes>
            <Route path="/" element={<LoginForm user={user} getUser={getUser}/>}/>
            <Route path="login" element={<LoginForm user={user} getUser={getUser}/>}/>
            <Route path="dashboard/*" element={<PrivateRoute user={user}><DashboardRoutes user={user}/></PrivateRoute>}/>
          </Routes>
        </Router>
      );
    }
    
    export default App;
    
    const DashboardRoutes = ({user}) => (
      <Routes>
        <Route path="/" element={<Dashboard user={user}/>}/>
        <Route path="acts" element={<ActsPage user={user}/>}/>
      </Routes>
    );
    
    const PrivateRoute = ({user, children}) => {
      if(localStorage.getItem('token')) {
        return children;
      }
      return <Navigate to="/login"/>;
    }

    В DashboardRoutes() можно добавлять вложенные роуты.
    Ответ написан
    5 комментариев
  • Библиотека UI компонентов для (HTML/CSS/JS) + ReactJS?

    Mike_Ro
    @Mike_Ro Автор вопроса
    Python, JS, WordPress, SEO, Bots, Adversting
    Как и предполагалось, не удалось найти "серебряную пулю", соответственно, для обоих были выбраны разные инструменты, исходят из факта популярности, количества готовых компонентов и наборов в фигме:
    https://getbootstrap.com/
    https://mui.com/
    Ответ написан
    Комментировать
  • Где почитать про то как настроить SSR в React Typescript приложении?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Начинаем от сюда: https://habr.com/ru/articles/527310/
    Затем впитываем один из следующих вариантов, на вкус:
    https://nextjs.org/docs/pages/building-your-applic...
    https://vitejs.dev/guide/ssr.html
    Ответ написан
    Комментировать
  • Как в исходные файлы реакта попадает переменная __DEV__?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Переменная __DEV__ в исходных кодах React используется для определения режима сборки: разработка или продакшн. Это позволяет добавлять или исключать определенный код в зависимости от режима, что может быть полезно для добавления дополнительных предупреждений, проверок и другого кода, который полезен только во время разработки.

    На практике __DEV__ не определяется непосредственно в исходных файлах React. Вместо этого, она обычно заменяется на этапе сборки с помощью инструментов, таких как Webpack или Babel.

    Вот как это обычно работает:

    1. В исходном коде React, вы можете увидеть конструкции вроде:
    if (__DEV__) {
      console.warn('Some warning message');
    }

    2. Когда React собирается для режима разработки, __DEV__ заменяется на true, а для режима продакшн - на false.

    3. Инструменты сборки, такие как UglifyJS или Terser, затем оптимизируют этот код, удаляя условные блоки, которые никогда не выполняются. Например, если __DEV__ заменяется на false, то весь блок if (__DEV__) { ... } будет удален при минификации.

    Для того чтобы замена __DEV__ работала, вы обычно настраиваете ваш инструмент сборки (например, Webpack) с помощью плагинов, таких как DefinePlugin для Webpack, который заменяет определенные токены в исходном коде на заданные значения.

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

    На правах копипаста, самому в лом писать...
    Ответ написан
    1 комментарий
  • Как сделать фильтрацию столбика таблицы с чекбоксами?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    import React, {useState, useEffect} from 'react';
    
    function SuperComponent() {
        // хранилище для пунктов
        const [checkedLanguages, setCheckedLanguages] = useState([]);
        const [displayData, setDisplayData] = useState([]);
    
        const languagesData = [
            { id: "1", name: "Javascript" },
            { id: "2", name: "Python" },
            { id: "3", name: "Java" },
            { id: "4", name: "Kotlin" },
            { id: "5", name: "Dart" },
            { id: "6", name: "C#" }
        ];
    
        // фильтруем пункты
        useEffect(() => {
            if (checkedLanguages.length > 0) {
                const newData = languagesData.filter(language => checkedLanguages.includes(language.name));
                setDisplayData(newData);
            } else {
                setDisplayData(languagesData);
            }
        }, [checkedLanguages]);
    
        function handleCheckboxChange(event) {
            const languageName = event.target.value;
            if (event.target.checked) {
                setCheckedLanguages([...checkedLanguages, languageName]);
            } else {
                const newCheckedLanguages = checkedLanguages.filter(language => language !== languageName);
                setCheckedLanguages(newCheckedLanguages);
            }
        }
    
        return (
            <div>
                {checkedLanguages.map(language => (
                    <div key={language} className="selected-language">
                        <p>{language}</p>
                    </div>
                ))}
    
                {languagesData.map(language => (
                    <div key={language.id} className="checkbox-wrapper">
                        <input
                            type="checkbox"
                            value={language.name}
                            onChange={handleCheckboxChange}
                        />
                        <label>{language.name}</label>
                    </div>
                ))}
    
                // отображаем отфильтрованные пункты
                <div className="languages-list">
                    {displayData.map(language => (
                        <div key={language.id}>
                            {language.name}
                        </div>
                    ))}
                </div>
            </div>
        );
    }
    
    export default SuperComponent;
    Ответ написан
    1 комментарий
  • Почему react не присваивает ключи?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Each child in a list should have a unique "key" prop

    https://react.dev/learn/rendering-lists#keeping-li...

    // ..
    
    {items.map((i) => (
      <React.Fragment key={i.id}>
        <Item {...i}/>
      </React.Fragment>
    ))}
    
    // ..

    или
    // ..
    
    {items.map((i) => (
      <Item key={i.id} {...i}/>
    ))}
    
    // ..
    Ответ написан
  • Почему SwiperSlide в столбик?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Попробуйте более подробный вариант кода слайдера от сюда https://codesandbox.io/s/66c8pc?file=/src/App.jsx , что получилось? Если результат прежний, не или не такой, как в песочнице, то выкладывайте здесь полный код своей страницы, на которой выводится слайдер.
    Ответ написан
    Комментировать
  • Почему react router не видит айдишник в урле?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    React Router 6 слегка иначе обрабатывается динамические роуты, попробуйте так:
    export const routes = [
      { path: '/', element: <MainPage /> },
      { 
        path: '/posts', 
        element: <Posts />,
        children: [
          { path: ':postId', element: <PostIdPage /> }
        ]
      },
      { path: '/about', element: <About /> },
      { path: '/*', element: <Error /> },
    ]

    const renderRoutes = (routes) => {
      return (
        <Routes>
          {routes.map((route, index) => (
            <Route key={index} path={route.path} element={route.element}>
              {route.children && renderRoutes(route.children)}
            </Route>
          ))}
        </Routes>
      );
    };

    export default function App() {
      return (
        <div>
          {renderRoutes(routes)}
        </div>
      );
    }
    Ответ написан
  • Как сделать запрос с локального хоста react axios?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    CORS заголовки должны быть установлены на сервере, который отвечает на Ваш запрос (в данном случае, Google API), а не на Вашем клиенте. Это механизм безопасности браузеров, и заголовки CORS должны быть установлены на стороне сервера. Если сервер настроен так, чтобы не принимать запросы с Вашего домена или IP-адреса, то на клиенте (в Вашем React-приложении) эту проблему не решить.

    Можно поднять свой локальный сервер, например на express.js и использовать его как прокси:
    import express from 'express';
    import cors from 'cors';
    import axios from 'axios';
    
    const app = express();
    
    app.use(cors());
    
    app.get('/getBooks', async (req, res) => {
      try {
        const result = await axios.get('https://www.googleapis.com/books/v1/users/1112223334445556677/bookshelves&key=myKeyApi');
        res.json(result.data);
      } catch (error) {
        console.error(error);
        res.status(500).send(error);
      }
    });
    
    app.listen(4000, () => {
      console.log('Proxy server running on http://localhost:4000');
    });

    Либо попробовать заюзать прокси на клиенте, указав его в package.json:
    {"proxy": "https://www.googleapis.com"}
    Ответ написан
    6 комментариев
  • На каком уровне нужно знать react для junior?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    На каком уровне нужно знать react для junior?

    Junior - понятие растяжимое, в одном месте Вы джун, в другом уже миддл.
    Какие есть отдельные важные темы?

    Зависит от конкретных требований вакансии/проекта. Вот прям минималка по моим наблюдениям:
    - Уметь писать/структурировать компоненты.
    - Уметь работать с хуками.
    - Уметь работать с локальным/глобальным состоянием (сюда же библиотеки управления состоянием Redux/Mobx/Zustand (зависит от проекта)).
    - Уметь работать с api.
    - Уметь писать html/css, а так же использовать какую то популярную GUI библиотеку, т.к. - это все таки фронт.
    Ответ написан
    Комментировать
  • Как скачать pdf axios?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Failed to execute 'atob' on 'Window': The string to be decoded contains characters outside of the Latin1 range

    В строке имеются символы, которые не поддерживаются в функции atob. Можно предварительно проверять строку на символы, либо можно попробовать так:
    const d = (name, blob) => {
        const url = URL.createObjectURL(blob);
        // code
    }
    Ответ написан
  • Стоит ли использовать index в названиях файлов в React?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    или все же стоит использовать
    /audioList/audioList.tsx

    Если не компонент:
    audioList/audioList.tsx
    Если компонент:
    AudioList/AudioList.tsx

    Какие вообще есть плюсы и минусы при использовании того или иного способа.

    Когда все разработчики придерживаются единых стандартов именования, код становится более читаемым. Это упрощает процесс ревью кода и позволяет новым членам команды быстрее разобраться в проекте.
    И вот можете расписать, пожалуйста, ваше мнение насчет этого. Плюсы и минусы и вашу позицию максимально подробно, хочу все же разобраться, что лучше, что хуже и что приоритетнее

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

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Алиасы до папок.
    2. Адрес до изображений (или чего угодно) на основе алиасов.

    https://habr.com/ru/articles/738132/
    Ответ написан
  • Из-за чего код не работает?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Обработчики событий в React должны быть написаны с большой буквы.

    Заменить:
    <button onclick={this.handleclick} >
    На:
    <button onClick={this.handleclick} >

    UPD: может все таки композиция, вместо классов?
    Ответ написан
    1 комментарий
  • Как настроить сео в React?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    От использования React Helmet без генератора статики Вы не получили особо прироста эффективности ранжирования Вашего сайта (хоть поисковики и сообщают, что они уже эффективно индексируют js-динамический контент). Т.к. Вы используете React, то оптимальным выбором будет сразу использовать NextJS.
    Ответ написан
    Комментировать
  • Какой подход к CSS использовать в 2023 году?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    CSS-IN-JS, CSS-modules

    Но я бы выбрал CSS-modules, т.к:
    1. Производительность клиента, а SSR не всегда возможен.
    2. Отсутствие смешивания CSS и JS.
    3. Отсутствие дополнительного обучения для использования CSS-IN-JS.
    Ответ написан
    2 комментария
  • Как организуется процесс написания разметки React?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Сразу пишите в jsx

    Да.
    Как подключаете less/sass?

    Как css/sass modules.

    Структура:
    - Страница < компонент
    - Страница < компонент < компонент

    До "Страницы" желательно некий Middleware с управлением состояния и запросами на сервер.
    Ответ написан
    2 комментария
  • Почему при запросе на сервер сбрасываются сессии?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    app.use(
      session({
        secret: SESSION_SECRET,
        resave: false,
        saveUninitialized: true,
        cookie: {
          secure: false,
          maxAge: 360000,
          sameSite: 'strict',
          domain: 'localhost', // добавил домен
        },
      }),
    );
    Ответ написан
    Комментировать
  • Как научиться React.js и Node.js вместе?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Мой вопрос состоит в том, действительно он так хорош и не устарел ли он?

    hh.ru посмотрите.

    Знакомый посоветовал мне учить React.js по видео с YouTube канала IT-KAMASUTRA

    вы мне посоветуете?

    Для начала, лучше выбирать знакомых, а затем, не учиться по видео.
    Ответ написан
    Комментировать