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

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    ‘повешевания’ события через onchange непосредственно на сам элемент
    Ответ написан
  • Как прокинуть данные из promise(axios) в state redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Конкретно в вашем примере, вы можете просто сохранить ссылку на this или использовать любые другие варианты привязки/проброса контекста...
    const that = this
    that.props...

    Но это вредный(!!!) совет. Так как скорее всего вы что-то делаете "не по учебнику". В componentDidMount у вас должен быть вызов action creator'a, внутри которого будет вызываться axios и из then которого вы будете dispatch'ить событие.

    p.s. не забывайте про подключенный redux-thunk, иначе вам придется dispatch импортировать в свои экшены, что тоже будет не по учебнику ;)
    Ответ написан
  • Как создать одинаковые страницы по регистрации?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Ваш стэк может попасть под аббревиатуру MERN (Mongo, Express, React, Node), по ней много рецептов в гугле. Если бы вы уже указали что умеете, было бы проще.

    Задача по частям (если вы умеете верстать):
    1) сделать API сервер (на node, на фреймворке для ноды - express или на koa или еще на каком-то), следовательно, прочитать что такое REST API, затем гуглить REST API exrepss mongodb и т.п.
    2) Сделать веб-морду для этого: страница логина, страница изменения информации.
    2.1) берем react + redux + react-router и вперед. По полочкам учим каждый из моментов, если нет знаний. Сначала react (форма + изменение данных в ней, потом асинхронная загрузка картинки с прелоадером - это все отличные задачи, никакого redux). Затем таже самая загрузка картинки, но уже с redux. Это даст базовые понятия. Затем связываете ваш фронтенд (пункт 2) и бэкэнд (пункт 1) в единое целое.
    Ответ написан
    Комментировать
  • Что можете посоветовать для графиков в React?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    есть достаточно простой и кастомизируемый (не сильно) компонент: react-chartjs-2
    Ответ написан
    Комментировать
  • React classname динамически изменить значение css селектора динамически?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Добавляйте в className ваш префикс с цветом / либо в тэг style передавайте нужное свойство.
    variable = this.state.color // например 's4'
    ...
    <div className={'s1 s2 s3 ' + variable}> // не забывайте пробел после s3
    ...

    На каждое изменение цвета в state пишите новое значение класса, реакт сам вызовет пере-рендер и вы получите то, что нужно.
    Ответ написан
  • Как предотвратить отправку формы при выборе локации в react-google-places-suggest?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Возможно, у формы есть onSubmit событие. Удалите его, и сделайте отправку формы только по onClick на кнопку отправки.
    Ответ написан
  • Есть смысл изучать React для использование в обычных целях?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Для верстки сайтов с анимацией реакт не пригодится.
    Для создания какой-нибудь "динамической" составляющей на сайте пригодится. Но представить это на обычном лендинге/сайте сложно. Делать слайдшоу, всякие таблицы с сортировками (небольшие же) и прочее - для всего этого отлично jquery подходит.

    Реакт пригодится вам, когда интерактива будет много. То есть, когда это будет веб-приложение (примеры: вк, яндекс маркет, сам яндекс в принципе и тд). Когда юзер может нажимать на множество элементов и что-то должно происходить взаимосвязанно.
    Ответ написан
    Комментировать
  • Почему стили из одного компонента переходят в другие?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Конечно глобальные. У вас один тэг body на всю страницу. Где бы вы не задали ему новые стили - это коснется всего проекта. Тоже самое касается и вашего div'a куда вы монтируете свое приложение.
    Ответ написан
    3 комментария
  • Как перенести большой проект на react 16?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Делаю тоже самое, спокойно переписывается. Правда не быстро.
    Чтобы усложнить себе жизнь сейчас и облегчить в будущем - сразу заодно можете добавить поддержку flow.

    Заодно можете настроить prettier и прогнать все файлы под единый стиль (если еще нет).
    Тоже самое про eslint (можно в процессе переписывания заодно исправить все ошибки).

    p.s. попробуйте автоматические "тулзы", может прокатит.
    Ответ написан
    Комментировать
  • Как обычно используют реакт на сайте?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    На "сайте" можно использовать реакт для отображения какого-то динамического куска. А можно весь сайт сделать "одним динамическим куском" - тогда это называется SPA (single page application, одностраничное приложение).
    Ответ написан
    1 комментарий
  • Как правильно удалять нужный элемент из массива?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Так как вам всегда нужно возвращать новый массив, задачу можно разделить следующим образом:
    1) в новый массив копируете* все с начала до index
    2) в этот же новый массив копируете все с index+1 до конца

    * - для копирования отлично подходит spread operator. В теории выглядит так:
    const arr = [{a:1},{b:2},{c:3},{d:4}]
    //допустим, вы прислали index 1 и сохранили его в переменную index, например
    const newArr = [
      ...arr.slice(0, index), // клонируем все элементы до индекса
      ...arr.slice(index+1), // клонируем все элементы после индекса
      // итого: индексный элемент удален
    ]


    Хазрат Гаджикеримов вам верно подсказал так же про filter. В комментарии привел верное решение. Давайте теперь рассмотрим ваше:
    if(action.type === 'REMOVE_STUDENT') {
            let newArr = state; // сохранили в newArr ссылку(!!!) на старый массив. Если вы хотели скопировать массив, то нужно было писать: let newARr = [...state] (если в state просто массив)
            newArr.splice(action.payload, 1); // здесь вы из newArr ( и из state, так как сохранили ссылку) удалили с ИНДЕКСА один элемент. Так же, внимание, вы используете sPlice, а не slice. Разницу нужно уточнить! (подсказка ниже как)
            return newArr.filter(element => element !== action.payload); // а здесь вы что вообще написали? вы сравнили element (что там? объект?) с action.payload (в которой как вы говорите индекс). Что должно быть в итоге? ;)
        }


    Очень легко гуглить все незнакомые функции по типу: name MDN
    в вашем случае запросы в гугл:
    slice MDN (первая ссылка выдачи)
    filter MDN (первая ссылка выдачи)

    Теория из-за которой не происходит понимания: копирование объектов по ссылке
    Ответ написан
    2 комментария
  • Как в React использовать переменные, полученные из Node.js?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Если используете webpack, можете использовать webpackDefinePlugin
    Например:
    new webpack.DefinePlugin({
          'ENV_API_ROOT_V1': JSON.stringify(process.env.ENV_API_ROOT_V1),
          'HTTP_PROTOCOL': JSON.stringify(process.env.HTTP_PROTOCOL),
          'WS_PROTOCOL': JSON.stringify(process.env.WS_PROTOCOL),
        }),

    старт вашей сборки, будет выглядеть примерно так:
    cross-env ENV_API_ROOT_V1=my_url_for_Api.com HTTP_PROTOCOL=https WS_PROTOCOL=wss webpack --progress --config ./webpack.prod.config.js

    в таком случае вам будут доступны в файлах переменные: ENV_API_ROOT_V1, HTTP_PROTOCOL, WS_PROTOCOL
    Ответ написан
    2 комментария
  • Где найти примеры очень сложных работ на Javascript/React/Angular/Vue?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    А кто, собственно, захочет выкладывать в опен-сорс решения для коммерческих организаций? Это же занимает время. Нужно все приготовить, подчистить, задокументировать где не хватает, тесты дописать. Это куча работы, кому за это заплатят? Какой прок от этого организации (повышение доверия к организации - как вариант, но далеко не всем это нужно)? Придется объяснять, что это за продукт, и что он делает. Почему применены такие-то костыли и как с этим жить. Бррр... там работы много. Не нужной для организации работы.

    Так же многие компании просто не хотят раскрывать как они сделали ту или иную фичу. Опять же - зачем?Конкурентов плодить? ;)

    В то же время, большие опен-сорс решения все же имеют место быть (но у них изначально опен-сорс как фича, или компания хочет таким образом привлечь к себе внимание. Либо компания может себе это позволить). Обычно, они сразу и всем известны, и гугляться на раз-два-три, типа react open source projects, angular open source projects и тд.
    Ответ написан
    Комментировать
  • Зачем нужен redux-thunk?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Если я правильно понял вашего коллегу, то речь была не о том, что нужно асинхронные функции через setTimeout вызывать, а это был просто пример, как сделать какой-то кусочек "типа асинхронным".
    Его довод был в том, что вместо вызова dispatch из замыкания (полученного с помощью redux-thunk, например) он вызывал store.dispatch напрямую (то есть у объекта store, и этот store импортировал бы в каждом файле).

    В таком случае, у redux-thunk - одно преимущество явное - не нужно импортировать store в каждом файле.

    В остальном, все очень четко расписано в ответе Дэна Абрамова, который привел holymotion.
    Если быть кратким, то вам нужна функция dispatch, ведь именно через нее вы "диспатчите" свои экшены. Вы не можете в асинхронном ответе написать:
    ...
    axios.get('/user')
          .then(res => {
            // успешно получили данные
            dispatch({ // <-- здесь вы вызываете функцию dispatch, а если она к вам не пришла в анонимной функции, с помощью redux-thunk, то октуда вы ее возьмете?
              type: GET_PROFILE_SECCUESS
              payload: res.data
            })
          })
    ...


    Поэтому вы были бы обязаны в каждый action creator, который является асинхронным, передавать бы помимо нужных вам аргументов, еще и функцию dispatch из своего контейнера. Что не удобно. (это все есть по ссылке на stackoverflow, но более подробно)
    Ответ написан
    1 комментарий
  • Как работать с confirm в react?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Итого (из комментариев) у топик-стартера настроен eslint и + ошибка в коде.
    Решение:
    1) использовать window.confirm вместо confirm
    2) передавать index (сейчас он у вас undefined)
    Ответ написан
    1 комментарий
  • Как использовать пакет prop-types?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вероятнее всего, предупреждение в том, что вы пишите React.PropTypes...
    А нужно просто PropTypes...
    Например:
    import React, { Component } from 'react'
    import { PropTypes } from 'prop-types' // можно и import PropTypes from 'prop-types'
    ... 
    ComputersList.propTypes = {
      data: PropTypes.shape({
        rows: PropTypes.array.isRequired,
        isFetching: PropTypes.bool.isRequired,
      }).isRequired,
      onlineSessions: PropTypes.array.isRequired,
      onChangeSort: PropTypes.func.isRequired,
    }
    Ответ написан
    Комментировать
  • Как правильно построить архитектуру компонентов react+redux?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Это как-то неудобно, у меня есть идея чтобы вынести List Item (stuff/:id/comp_7/:item_id) и Subitem (stuff/:id/comp_2/:item_id/sublist/:subitem_id) в отдельные контейнеры.

    Нормальная идея.

    Судя по вашей схеме, каждый элемент с красным текстом (я так понимаю, это роуты) - должен быть контейнером и будет легче.
    Ответ написан
  • Как правильно тестировать Reducer в Jest?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    it(`handle action ${patientActions.ON_CHANGE_PATIENT}`, ()=>{
            expect(reducer(undefined, {
                type: patientActions.PATIENT_INIT_STATE, // тут должно быть patientActions.ON_CHANGE_PATIENT
                payload: {
                    value: '11122',
                    field: 'patient_ur'
                }
            })).toEqual({...defaultStates, patient_ur: '11122'})
        })


    ошибку в этом тесте исправьте, если "пройдет", то думаю дальше все получится. Суть юнит-тестов в том, что вы пишите: было А, применил какую-то функцию (в вашем случае редьюсер), стало Б. Сравнить с В.
    Причем "В" вы описываете сами.
    Ответ написан
  • Какой фреймворк Node.js использовать для связки React + Node?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Да все те же express, koa...
    Вообще, на hh.ru пробовали искать по ключевым словам типа node.js, react?
    Ответ написан
    Комментировать
  • Когда действительно необходимо потащить flow в проект?

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

    Если у вас п.2 - то просто берете flow и проверяете стало ли с ним лучше / удобнее. Если да - можно внедрять.
    Если п.1 - анализируете что может вам помочь в работе, и пробуете разные инструменты.
    Ответ написан
    Комментировать