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

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    после определенных действий свойство type_id изменилось, как откатиться назад к начальному состоянию только свойства type_id не затрагивая другие?

    Добавлю теории: выше, Yustas Alexu написал вам код, осталось только пояснить, что в нем, вы берете все то, что есть в state, и переписываете filter_models, в котором опять же берете все что было в state.filters_models и переписываете только одно свойство.
    Итого: нужно разобраться как работает оператор ..., создайте объекты разной вложенности в песочнице, и на основе ответа от Yuxus попробуйте по изменять разные поля, не ломая остальное.
    Ответ написан
    Комментировать
  • Почему в react при переходах по стр - они отрываются снизу?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Не должно быть такого, сделайте демо на гитхаб, чтобы понять получше.
    p.s. на крайняк, если все плохо, всегда можно использовать window.scrollTo
    Ответ написан
    2 комментария
  • Как подружить react-router-dom с бекенедом symfony?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вам нужно использовать API-подход. Забудьте про шаблоны. Ваш бэкэнд только отвечает json-ом на ваши запросы (get/post/put/delete)

    Роутинг целиком переезжает на клиент.

    подобные вопросы:
    Объясните простым языком, как происходит общение React с бэкэндом например Java или PHP?
    Что использовать на backend для SPA приложений?
    Ответ написан
    Комментировать
  • Как рендерить разные страницы в ReactJS?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Если есть другой способ по нажатию кнопки рендерить другую страницу, то буду крайне рад услышать.


    Объяснение про роутинг в SPA приложениях + разбор того как устроены главные компоненты RR4.
    Ответ написан
    Комментировать
  • Как создать двумерный массив в state и заполнить его?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Создаете: ссылка (RU)

    Затем с помощью setState записываете... например:

    ...
    state = {
      myData: []
    }
    ...
    
    this.setState({ myData: [[1,2,3],[4,5,6],[7,8,9]] })
    Ответ написан
  • Почему Flow ругается на передачу функции компоненту?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    В добавок к коментарию, попробуйте еще так: SyntheticInputEvent<HTMLInputElement>
    Ответ написан
    5 комментариев
  • Нужно ли знать DOM для react?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Есть у Кантора у учебника вторая часть, она так и называется: Документ, события, интерфейсы ( learn.javascript.ru )
    Если вы этого не знаете, react будет идти с трудом. Разумеется, про 1ю часть само собой действует такое же правило. Не нужно знать все "на зубок", надо иметь представление, чтобы задавать правильные вопросы в гугл.
    Ответ написан
    1 комментарий
  • Где джуну получать тестовые задания?

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

    Здесь есть задания и разбор. Будет пополняться.

    Задание 1 (уже разобрано)
    Задание 2 (будет разобрано в конце мая)

    p.s. ссылки ведут на github, поэтому я надеюсь у модераторов не будет претензий.
    Ответ написан
    Комментировать
  • Где найти примеры приложений React.js?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Сейчас мы делаем тестовые задания ( первое, второе, разбор первого), затем будем и проект полноценный пилить. Хотя текущие ТЗ уже по сути небольшие мини-проекты. Так же на стриме можно задать вопросы и посмотреть, что пишут другие.
    Ответ написан
    2 комментария
  • Как будет выглядеть аналогичный код на любом action creator?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вы отправляете простой объект:
    {
      type: 'BLA_BLA'
    }

    Это ваш action.

    Это
    function qq() {
      return {
        type: 'BLA_BLA',
      }
    }

    ваш "создатель действия" (action creator).

    Чтобы объект с типом (и данными если нужно), попал в редьюсер, его нужно прокинуть через специальную "трубу" - dispatch (диспетчер).

    То есть:
    dispatch(qq())
    // или
    dispatch({
      type: 'BLA_BLA',
    })


    Затем, пропущенный через "диспетчер" объект, попадет во все редьюсеры. В каком-то из редьюсеров, будет команда "фас" на определенный тип (type), в нашем случае - строка 'BLA_BLA', значит:

    export default (state = initialState, action) => {
        switch (action.type)
        {
            case 'BLA_BLA':
                // вот сюда придет javascript компилятор, так как вы попали в нужный кейс
                // ибо выше указано - switch по типу экшена (action.type)
               // ниже вы делаете что вам нужно с вашими данными
              // конкретно в этом кейсе, вы берете все что было в state и изменяете loading на true
                return { ...state, loading: true };
            case CALLBACK_SUCCESS:
                // сюда action с типом 'BLA_BLA' не попал
                return { ...state, status: 'OK' };
            case CALLBACK_ERROR:
               // сюда тоже
                return { ...state, status: 'ERROR', message: action.message };
            default:
              // и сюда
                return state;
        }
    }
    Ответ написан
    Комментировать
  • Почему выполняется только последний dispatch?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Проблем в connect'e не вижу. Ищите дальше по цепочке. Может быть дело в reducer'e?
    Экшен IS_AUTH в логгере или redux_dev_tools виден?
    Ответ написан
  • Как реализовать OAuth в React приложении через GitHub?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Из личного опыта ничего посоветовать не могу, но нашел следующие материалы, которые бы стал использовать для изучения:

    - https://medium.com/front-end-hacking/use-github-oa...
    - auth0 тут как тут тоже - https://auth0.com/authenticate/react/github/
    - видео learn.humanjavascript.com/react-ampersand/redirect...

    вот копните в эти материалы (EN), затем что-то прояснится.
    Ответ написан
    Комментировать
  • Почему не рисуется график в Canvas внутри React компонента?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    зум/драг - скорее всего запускают изменения пропсов, и график рисуется.
    Сделайте минимальный пример с вызовом этой функции и канвасом без всего остального. На чистом create-react-app, к примеру. Возможно, если у вас уже будет работать - то вы поймете, что имеется в списке "отличий" и потихоньку добавляя/удаляя - выясните.
    Если же нет - у вас будет пример, который вы зальете на гитхаб и мы поможем.

    Сложно придумать, что может быть не так, не смотря в код. Очевидно, что либо канвас элемент как-то не отрисовался, когда вы пытаетесь туда что-то засунуть, или просто ссылка смотрит не на текущий canvas, а куда-то в другое место, раз вы говорите, что с данными все в порядке.

    Плюс, может баг какой, форс апдейт попробуйте (грязный вариант, но раз уж все равно репозитория с примером нет...)
    Ответ написан
  • Когда mapStateToProps готов?

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

    еще вариант: " Придется городить какую-то херню со счетчиком, похоже, чтобы работало только первый раз." только без херни. Смотрите если в кошельках было пусто, а стало густо - обновляете и делаете какие нужно запросы. Если нет - этот "иф" проскакивается и ничего не происходит.
    Ответ написан
    Комментировать
  • Как соединить front и back?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    dfv123 написал все верно, но добавлю: у вас больше нет шаблонов на handlebars. Максимум для index.html
    Ваш сервер, на все маршруты кроме тех, что вы напишете для API, должен отдавать index.html, где подключен "бандл" (общий файл скриптов js) и есть элемент, куда будет монтироваться приложение.

    Затем, вы создаете API: связка из нескольких маршрутов которые принимают запросы (GET/POST/PUT/DELETE) и отдают данные в виде JSON. Вы эти данные на клиенте считываете и отображаете.

    Роутинг внутри приложения (изменения урлов), тоже переезжает на клиент, и вы это будете делать, скорее всего с помощью react-router.
    Ответ написан
    1 комментарий
  • Как правильно удалить объект в массиве при обновлении состояния компонента?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Массив хранить в state.
    При клике на кнопку "крестик" - вызывать обработчик, например onDeleteClick (который является методом вашего класса)

    state = {
      users: [/*.. массив с юзерами*/]
    }
    ...
    onDeleteClick = (e) => {
      const id = e.currentTarget.dataset.myId
      const новый_массив =  массив_без_удаленного_элемента (подсказка, удалять можно через фильтрацию по айди)
      this.setState({ users: новый_массив })
    }
    ...
    let user = this.props.users.map(function(user){
          return <li key={user.id}><User number={user.id} id={user.id} text={user.id} onDeleteClick={this.onDeleteClick}/></li>
     })
    ...
    // где-то там в компоненте User (что там внутри не знаю, но предположим есть кнопка удаления как вы пишите)
    ...
    render() {
     <div>
     // что-то по верстке про юзера
       <button onClick={this.props.onDeleteClick} data-my-index={this.props.user.id}> Удалить</button>
     </div>
    }


    Главная идея: состояние (список юзеров) хранится в родителе в стейте. Для удаления, вы должны из родителя послать функцию, в качестве одного из props, чтобы внутри этой функции изменить стейт (в родителе же). Для того, чтобы понять какого пользователя удалить, передаете какой-нибудь признак, например id из нативного data-* атрибута, который сами же и устанавливаете, передавая id в качестве props из родителя, когда рисуете User
    Ответ написан
    Комментировать
  • Как подключить css в react?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Если в конфиге вебпака указано все корректно (а тут я думаю create-react-app был), то нужно просто использовать эти файлы, например: <img src="//images/my_image.jpg">

    попробуйте запустить проект и в браузере открыть вашу картинку - localhost:3000/images/my_image.jpg
    Ответ написан
  • Как сделать несколько компонент с независимым состоянием на странице?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Внутри connect функции вы подписываетесь на кусочек вашего store (то есть, на кусочек всего состояния вашего приложения). Обычно это выглядит так:

    const mapStateToProps = state => ({ // state = все ваши редьюсеры, то есть тут лучше было бы писать store, но так уж поевелось..
      campaigns: state.campaigns, // компонент подписывается только на state.campaigns (то есть только на редьюсер campaigns)
    });
    connect(mapStateToProps/*, mapDispatchToProps*/)(CampaignsList) // происходит коннект, mapDispatshToProps - это для "прокидывания" создателей действий (action creator)


    Следовательно, вы можете просто в обоих компонентах приконнектится к одной части в сторе, либо еще лучше приконнектится в родителе и отрисовывать два списка компонентами.

    В скором времени будет вебинар (вход свободный) по основам редакса, думаю вы к тому времени уже разберетесь, но тем не менее заходите (vk / telegram, сайт)
    Ответ написан
  • Как избежать дублирования экшенов и редьюсеров?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Одинаковые данные грузятся одним и тем же экшеном, в один и тот же редьюсер.
    Ситуация с юзерами вполне ясна, загружаете их и используете на разных страницах. Если нужно обновить список юзеров - то вызывается тот же экшен.
    Если нужно как-то с юзерами взаимодействовать, но так, чтобы в другом месте они не изменелись, то поясните, я не могу придумать такой кейс, обычно это "не одинаковые" данные.
    Ответ написан
    6 комментариев
  • Почему не меняется состояние хранилища?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вы забыли store.subscribe

    Сравните с примером здесь
    Ответ написан
    Комментировать