Ответы пользователя по тегу React
  • Редактор кода на веб-странице(React), какие могут быть варианты?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Очень сильно советую ace editor
    В ссылке версия для реакта. Очень просто настраивается, и оч хороший функционал.

    UPD.
    чуть не забыл, есть ещё codemirror, у него преимущество в большом кол-ве управлений состоянием редактора, к примеру можно сделать превью, для студентов, какого то кода, как поэтапно его писать, чтоб код в редакторе сам писался и параллаельно показывался результат.
    Тоже самое можно сделать и через ace, но codemirror проще. А в ace больше возможностей, как редактора.
    Ответ написан
    3 комментария
  • React + Redax + Sagas - как правильно строить приложение?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Хороший вопрос, но что касается модели данных, то некоторые паттерны в этом плане за нас уже придумали и они довольно не плохие. к примеру redux-ducks, их можно разбивать, как в примере выше, а можно и группировывать в одном файле. Собственно саги они в самом конце располагаться должны, вот мой пример организации компонента с сагами

    Про часть представления данных, я сам постоянно пытаюсь разделять компоненты и контейнеры. Но тут главное не перемудрить, когда из одного родительского контейнера прокидываются данные через 50 потомков в компонент. Уж лучше тогда где то ниже законнектится к стору и получить нужный параметр.
    Ответ написан
    Комментировать
  • Как сделать слайдер в react?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Есть специальная библиотека для этого
    react-fullpage
    Ответ написан
  • Кто знает модуль для просмотра зависимостей компонентов в React.js?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Есть такая библиотека source-map-explorer
    По бандлу собирает все зависимости и определет размер каждой
    Ответ написан
    Комментировать
  • Почему в при тестировании саг, появляются ошибки отсутствия данных в самих сагах?

    GreyCrew
    @GreyCrew Автор вопроса
    Full-stack developer
    Нашел ответ.

    Нужно определить payload и отправлять значение параметром в sagaGetUsers.next()
    к примеру
    describe('users sagas', () => {
      
      test('look on a default offset users at list', () => {
        const sagaGetUsers = getQueryUserSaga()
        const payload = 'default_filter=none'
        expect(sagaGetUsers.next(payload).value).toEqual(take(GET_QUERY_USERS_REQUEST))
        expect(sagaGetUsers.next().value).toEqual(select(filtersSelector))  
      })
    })
    Ответ написан
    Комментировать
  • Событие смены роута в react-router?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Я думаю, что можно реализовать переход между страницами через специальный метод, который бы делал событие replace() из библиотеки connected-react-router, (либо другой смотря через что у вас работает маршрутизация) после соответствующих махинаций с состоянием.

    Но в целом подход смены пути после обновленя состояния мне кажется странным ввиду того, что обычно после перключения страниц это состояние уже не используется.
    Лучше в таком случае хранить состояние в редаксовом хранилище.
    Ответ написан
    Комментировать
  • Логика при создании модального окна?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Очень сильно поддерживаю вариант с созданием портала
    В остальном аналогично ответу Иван В
    Создаем состояние в стейте, либо сторе,
    По клику вызываете методы, которые открывают/закрывают портал.
    Ответ написан
    Комментировать
  • Как использовать react-bootstrap‚ а точнее пагинацию?

    GreyCrew
    @GreyCrew
    Full-stack developer
    В библиотеке react-bootstrap к сожалению только дизайн с версткой. Функционал по большей части самому надо делать.
    Вешаешь стандартный onClick, где внутри уже делаешь запрос к серверу с параметром пагинации, за новой порцией данных.
    Ответ написан
    Комментировать
  • Как в React добавить новое значение в state?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Если тебе надо динамически добавлять новое значеие, то
    1. создаешь массив (к примеру state = {array : []})
    2. в родительском компоненте пушишь в него данные
      const newArray = this.state.array
      newArray.push('test')
      this.setState({array : newArray})


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

    GreyCrew
    @GreyCrew
    Full-stack developer
    Это чисто архитектурный вопрос.
    Я вижу несколько способов перемещения стора все зависит от требований перемещения.
    Если все должно работать в одном браузере, то можно сохранить текущий стор в localstorage (куки не рекомендую, из-за ограничения в размере) и при загрузки другого проекта, при их наличии в мидлварах сразу их подтягивать.

    Если идет привязка к клиенту, но не к браузеру либо устройству, то советую хранить данные в базе. т.е. уже после авторизации подгружать прошедшее состояние, которое было у пользователя. Тут надо хорошо продумать какие данные действительно нужно сохранять, покуда хранение всего стора порой может быть избыточно. (К примеру текущий прогресс пользователя при заполнении каких-то важных данных, как сделано в госуслугах.)
    Ответ написан
    Комментировать
  • Как отправить компонент с react порталом в storybook?

    GreyCrew
    @GreyCrew Автор вопроса
    Full-stack developer
    Решил таким образом в самом модал компоненте прописал условие
    componentDidMount() {
        if (!selectRoot) {
          const newNode = document.createElement('div')
          newNode.setAttribute('id', 'select-root')
          const rootNode = document.querySelector('#root')
          rootNode.after(newNode)
          newNode.appendChild(this.el)
        } else {
          selectRoot.appendChild(this.el)
        }
    }


    Но не уверен, что этот вариант хороший.
    Ответ написан
    Комментировать
  • Как inline изменять фон div в ReactJS?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Допустим у вас есть массив цветов (нет не те, которые цветут)
    const colors = [#000, #333, #555 , #etc...]
    Берем компонент и в нем делаем цикл по этим цветам, в которых передаем параметром один из цветов.
    class BackgroundSwitcher extends React.Component {
      render() {
        return (
          <>
            {colors.map(color => <Hero background={color} />)}
          </>
        );
      }
    }

    Теперь в компоненте Hero берем и вставляем цвет

    const Hero = (props) => <div className="hero" style={{background: props.background}}>
       <img src="images/heroes/flash.jpg"/>
       <div className="hero-desc">
           <h1>Flash</a>
           <h3>Three men have held the title of "The Fastest Man Alive" -- Jay Garrick, Barry Allen, and Wally West -- each of them redefined the word "hero."</a>
       </div>
    </div>


    Конечно это все в вакууме, но надеюсь понятно, как передавать параметры.

    Итого мы будем иметь несколько элементов с разными фонами.
    Ответ написан
    Комментировать
  • Грамотно ли так использовать styled components?

    GreyCrew
    @GreyCrew
    Full-stack developer
    С точки зрения проектированя я бы импортировал конкретные, нужные стили. Но возможно это дело удобства. Покуда я бывает не все стили использую в конкретных компонентах.
    import {Login, LoginWrap, DataInput} from '../styledComponents/login.js'


    return(
        <LoginWrap>
          <Login>
              <img src={logo} alt='logo'/>
              <h3>Login</h3>
            <DataInput>
              <input placeholder='Login' ref={loginInput}/>
              <input placeholder='Password' type='password' ref={passInput}/>
            </DataInput>
            <span>{loginError} &#160;</span>
            <input type='submit' value='Login' onClick={onLogin}/>
          </Login>
        </LoginWrap>
      )
    Ответ написан
    2 комментария
  • Как сделать адаптивную таблицу на Material-UI?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Тут надо условие сделать на размер экрана, и по нему подставлять нужные данные в таблицу.

    *Храните в state текущие данные таблицы и размер экрана.
    *Создайте событие updateDimensions, в котором по событию изменения экрана (window.innerWidth) обновляете state с новыми данными.

    Пример события изменения экрана
    Ответ написан
    4 комментария
  • Как передать данные на новую страницу в React?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Сораняйте в таком случае состояние не в state, а в store.
    1) Создайте aсtion по которому будете сохранять состояние инпута
    2) Создайте функцию action creater, через которую будете передавать данные в редьюссер
    3) Из редьюссера передавайте данные в store
    4) Из store получите данные во второй странице.

    Тут нет какого то быстрого решения, почитайте документацию для подробностей.

    Вот пример простой архитектуры, через redux ducks
    Ответ написан
    Комментировать
  • Как в роуте если задан один путь url, добавлять к нему дополнительный путь?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Есть несколько вариантов, но как я вижу, лучше всего правильно продумать архитектуру.
    У вас при переходе в /first наверняка открывается какой то контейнер, в котором находятся другие роуты (/first/item1, /first/item2 e.t.c.)
    Автоматический редирект можно сделать в компоненте First, там где вы описываете вложенные роуты
    <Switch>
         <Redirect
                from={"/first"}
                exact
                to={"/first/item1"}
                render={() => <Item {...props}/>}
          />
          <Route
                path={"/first/item1"}
                render={() => <Item {...props}/>}
          />
         <Route
                path={ '/first/item2'}
                render={() => <List {...props}/>}
         />
    </Switch>
    Ответ написан
    Комментировать
  • Как решить проблему с загрузкой изображений большого размера при взаимодействии с API?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Если пользователю не нужны изображения ±200МБ, как вариант можно промежуточный сервис сделать на node.js
    Есть такая библиотека sharp, в ней можно конфиги размера изображения и указывать.
    Ответ написан
    Комментировать
  • Как отрезать не помещающийся текст?

    GreyCrew
    @GreyCrew
    Full-stack developer
    можно сделать через css, если для заголовка, то запрещаем ему быть больше одной строки так.
    selector{
        display: flex;
        align-items: left;
        max-width: 40px;
        overflow-x: hidden;
        white-space: nowrap;
    }


    Можно поставить точки в конце блока
    text-overflow: ellipsis;

    Для основного текста (который в несколько строк) делаем тоже самое, только добавляем max-height с overflow-y: hidden; и убираем white-space
    Ответ написан
    Комментировать
  • Простые open source проекты на JS для их 'разбора'?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Мне в свое время было очень интересно разбирать lodash оч много интересных алгоритмов для js

    Из React, могу посоветовать посмотреть офф доку, там много есть примеров для разбора

    С NodeJS все не так просто, там для конкретного случая много кода написано. Единственно припоминаю статью, где писали про чистый код на ноде
    Ответ написан
    Комментировать
  • Как использовать ванильный график в реакт?

    GreyCrew
    @GreyCrew
    Full-stack developer
    Мой совет найти что то по новее, сейчас есть много подобных инструментов и на реакте.
    Если нужен именно этот, то есть несколько вариантов.
    1) Сделать отдельную не реакт страницу и вклинить её, через iframe.
    2) Сделать реакт компонент, переместив в него логику рендера, а подгружаемые библотеки подключить отдельно.

    Второй вариант лучше, но дольше, первый быстрее.
    Ответ написан
    Комментировать