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

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    componentDidMount = "компонент примонтирован". То есть он будет примонтирован еще раз, только если он будет до этого размонтирован, а для этого вам нужно его выкинуть из текущей верстки.

    Рекомендую использовать в вашем случае componentdidupdate (разобраться что это за "лайфхук").
    Ответ написан
    Комментировать
  • Как прокачаться в react/redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Запилить любой проект, в котором будут:
    1) авторизация
    2) роутинг (доступ к некоторым страницам закрыт для не авторизованных)
    3) динамическая подгрузка данных
    Ответ написан
    3 комментария
  • Как сделать такой роутер на react?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вопрос можно перефразировать так:
    1) можно ли в реакте написать какой-то динамический шаблон
    2) в зависимости от чего в моей задаче изменять шаблон

    Ответы:
    1) да, можно
    2) можете завязаться, например, на window.location.pathname . Если там /auth - рисуете шаблон + такой-то набор инпутов или чего вам нужно, если там /test - то другой. Так же можно сразу в constructor в state установить какие-то параметры, на основе которых вы будете отображать шаблон и другие разные варианты.

    В render функции это может выглядеть как-то так:
    ...
    render() {
      let template
      if (window.location.pathname.indexOf('auth') !== -1) {
        template = <div>это auth</div>
      } else {
        template = <div>это не auth</div>
      }
      return template
    } 
    ...
    Ответ написан
    Комментировать
  • Как сделать onChange функцию через redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    export function onChangeUser(value, name) {
      return {
        type:     login.ON_CHANGE_USER,
        fieldName: name,
        value: value
      };
    }
    ...
    case loginActions.ON_CHANGE_USER:
      return {
        ...state,
        [action.fieldName]: action.value
    }
    Ответ написан
    2 комментария
  • Можно ли декорировать redux connect или как отписаться от redux store?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Не знаю зачем, но на вопрос "Как отписаться от redux store, когда демонтируется?" ответить легко - использовать componentWillUnmount

    p.s. стоит прочитать полностью - the component lifecycle
    Ответ написан
  • Передача массива объектов в component?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вы не передаете в JobsList никаких props, следовательно this.props.Jobs = undefined.
    Выносите ваши "джобсы" в тот же файл где export default App, и пишите:
    return (
          <div>
            <JobsList Jobs={jobs} />
          </div>
        );
    Ответ написан
    Комментировать
  • Когда лучше всего отправлять запрос об изменении текста в input?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Для этого придумали функцию debounce
    onChange={debounce(this.onInputChange, 300)} // будет вызываться не чаще чем раз в 300 ms
    Ответ написан
    1 комментарий
  • Как отправить все данные из LocalStorage по submit?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Так ответ прямо в вопросе. Отправить весь localStorage.
    ...
    onSubmit() {
    const data = JSON.stringify(localStorage)
    // отправить data
    }

    Только учтите, что там могут быть еще данные, не только с вашей формы.
    Ответ написан
    Комментировать
  • Как вы организовываете folder structure в medium-to-large size react приложении?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    1f2bd294843d4ddca1bb3dd20cf35a70.jpg
    Какая-то тенденция, возможно.. Хочется как-то все "улучшить", вместо "просто писать, пока не будет проблемы". С чем, конкретно, вы столкнулись, что пришло осознание такое?

    Мне кажется, может где-то в проекте и есть неудобства, но я их не ощущаю. Появилась папка helpers, куда я выношу функции, которые используются в разных других файлах, все остальное осталось так же как и было изначально (в проекте уже 1200+ коммитов, много компонентов/контейнеров).

    p.s. папка locales - там файл перевода, в routes и store - по одному конфиг.файлу.
    Ответ написан
    2 комментария
  • Лучшая библиотека для asynchronous data fetching?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Использую isomorphic-fetch
    Ответ написан
    Комментировать
  • Как правильно вывести данные из JSON в React-router/Redux, на новой стр., соответствующие текущему id?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    showInfoPage(e) {
      const id = e.currentTarget.id
      // далее нужно вызвать сам переход
      // я делаю это через push из react-router-redux ( import { push } from 'react-router-redux' )
      // можно прокинуть через dispatch
      dispatch(push('/information/'+id))
    
      //конечно, у вас dispatch скорее всего будет прокинут из props, поэтому финальный вариант
      this.props.dispatch(push('/information/'+id))  
    }
    
    <tr onClick={showInfoPage} id={infos.id}>
         <td key={infos.id}>{infos.id}</td>
         <td key={infos.about}>{infos.about}</td>
    </tr>


    p.s. вместо id, можете использовать data-* атрибуты, и доставать их через e.currentTarget.dataset.*
    Ответ написан
    4 комментария
  • Почему обновляется родительский элемент react+redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    ...
    let AppSmallRedux = connect(
        (store) => ({ data: store.reducerAppSmall }), // (1)
        dispatch => ({
            update: () => dispatch({ type: "UPDATE_AppSmall" })
        })
    )(AppSmall);
    ...
    let AppRedux = connect(
        (store) => ({ data: store.reducerApp }), // (2)
        dispatch => ({
            update: () => dispatch({ type: "UPDATE_App" })
        })
    )(App);
    ...


    В пунктах (1) и (2) вы подписывались на весь STORE, следовательно, если он менялся, то у вас на это реагировали все "приконекченные" компоненты. Если подписываться только на "нужный кусочек стора" - то все будет ок.

    Ваш обновленный пример (codepen).
    Ответ написан
    Комментировать
  • Как эмулировать нажатие на react элементы?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Если вы на чужом сайте пытаетесь выполнить $ что-то там, то нужно чтобы $ был равен функции jQuery, ведь по сути, $ - это просто имя функции.
    Поэтому, для начала, введите в консоли $, должно быть что-то подобное:
    6a61a3674506467ea8ca7eb92a01b4fe.jpg
    А не так:
    dff7fdbc6f6a49f3bc13ebcf6258f990.jpg

    Окей, допустим jquery подключен и доступен через $, значит далее проверяйте, что доступен этот элемент:
    $(".dealbtn-up")
    Если доступен и он всего один(!), то едем далее, и проверяем доступна ли функция click (это уже из области фантастики, так как она 100% должна быть доступна, но мало ли что написано другим программистом, главное в этом ответе, для вас - понять последовательность действий).
    Выглядит примерно так.

    Если же, таких ссылок много, то нужно обращаться к элементу по индексу, например:
    $(".dealbtn-up")[0].click()
    Ответ написан
    2 комментария
  • Как правильно обработать Promise redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Судя по коду, вы решили ввязать еще и в это дело redux, значит надо дополнить ваш пример редьюсером и считать данные из него.
    офф.документация
    туториал на ру (устарело, но сама суть не изменилась)
    Ответ написан
    Комментировать
  • Как сделать такой параллакс?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Он же в опен-сорсе
    Ответ написан
    Комментировать
  • Как сделать ссылку на определённую статью в react?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    (вариант с использованием react-router)
    Делаете роут с параметром, например:
    <Route path='/articles/:id' component={Article}>, где параметром является имя_переменной после двоеточия, в данном пример - id

    В компоненте Article, имеете доступ к ID через this.props.params.id

    Далее как угодно, например в componentDidMount делать запрос за этой статьей и показывать ее..
    Ответ написан
    Комментировать
  • Новые возможности javascript являются частью спецификации языка?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    что jsx-скрипт распарсивается какой-то библиотекой написаной на стандартном javascript и транслирует в него же...

    Абсолютно верно. JSX превращается в обычные js-объекты.

    На счет любых атрибутов - сказать точно не могу (angular / vue тоже же используют кастомные атрибуты, но я не знаком с тем, как обрабатываются шаблоны подобные), знаю лишь, что data-* валидны в HTML 5, а если вы про "атрибуты в jsx", то там да... любые, но это уже и не HTML.
    Ответ написан
    Комментировать
  • Переписать часть сайта на react/redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    React для этого прекрасно подходит. Заменить какую-то "страницу" из всего сайта - самое то.

    Конечно, для этого, нужно будет, чтобы на сервере было REST API (если уже - то писать "отдельный" сервер не нужно, а если нет - то все равно не нужно, но придется писать "отдельный" кусок, в котором будет реализовано это API).

    На react native скорее всего тоже сможете использовать, но я бы сразу так "радужно" не настраивался, ибо с кодом придется повозиться, в любом случае, то что будет написано на бэкэнде уже пригодится для мобильного приложения на любом инструменте.
    Ответ написан
    4 комментария
  • Что делать с огромным файлом скриптов React?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Это уже файл после "разбивания на кусочки" (для гугления - code splitting) ?
    Грузите то, что нужно определенному роуту и будет получше.

    гугление не даст полной картинки сразу, но постепенно соберется.

    Потребуется использовать getComponent из React-router, а далее webpack 2 уже сам сделает почти все...

    Выглядит так:
    function def(promise) {
      return promise.then(cmp => {
        console.info('Dynamic loaded by route: ', cmp.default.displayName) // для тестирования можете логировать имя компонента
        return cmp.default
      })
    }
    
    ...
    <Route path='/signin' getComponent={() => def(import('../containers/SigninContainer'))} />
    ...
    Ответ написан
    3 комментария
  • Что нужно знать перед изучением angular и react?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    1) по нововведениям почитайте у Кантора
    2) далее сделайте пример из оф.доки
    3) далее по аналогии с примером из оф.доки, чуть-чуть измените что-нибудь и сделайте по-своему
    4) если речь про react, то с усложнением примера, начнется медленный переход в сторону "нужен redux/подобные ему" -> читайте доку, продолжайте накручивать пример.

    p.s. если пример вам интересен, то прогресс будет быстрее, поэтому стоит поработать с API интересных вам сайтов, steam, vk, ...
    Ответ написан
    Комментировать