Ответы пользователя по тегу React
  • Next JS как отловить ошибку если картинка возвращает 404 ошибку?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Вы можете повесить слушатель onError на img, он срабатывает в случае любой ошибки при загрузке. Нужно будет посмотреть на объект ошибки, по нему как-то понять, что это именно 404 и передать в src этой же картинки ссылку на картинку по умолчанию
    Ответ написан
  • В чем разница между css modules и styled-components?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Про styled-components основано на том, что я читал об этом подходе, опыта с ним нет

    Корневое отличие в том, что styled components - это css-in-js, стили пишутся шаблонной строкой, вставляются в атрибут/тэг style . Препроцессоры связывать с этим уже посложнее (вероятно, в этом нет потребности)

    css-modules проще, можно использовать препроцессоры, собирать в бандлы, чанки, да хоть в тот же тэг style

    Это если очень коротко) Почитайте о css-in-js, всё должно быть уже написано
    Ответ написан
    Комментировать
  • Тестирование React Приложения?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    есть ли в принципе необходимость тестирования React, если все можно протестировать "глазами"?


    Есть, всё вы глазами не протестируете. У вас ещё не было случаев, когда правишь что-то в одном месте, а ошибка из-за этого появляется в другом? Вот от таких ошибок защищает unit-тестирование

    какие вы библиотеки используете при тестировании?

    jest + enzyme

    насколько сложно писать React приложение/сайт по TDD?

    Имхо, tdd плохо подходит именно для unit-тестов. Для end-to-end гораздо лучше

    возможно вы знаете источники с примерами тестирования React основанных на функциональных компонентах?

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

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Вы же слышали про shouldComponentUpdate ?) Просто добавьте его к вашим item-компонентам
    Или React.memo для функциональных компонентов

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

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Потому что вы никуда не передали onChange?
    Ответ написан
  • Какие инструменты есть для тестирования приложения на React +Laravel?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Sentry обычно не относят к тестированию)

    Если вам нужны end-2-end тестирование (насколько я понял), рекомендую смотреть в сторону Cypress
    Ещё популярные инструменты: puppeteer, webdriver.io . Всем им не важно, на чём написан ваш сайт, они тестируют юзер-сценарии
    Ответ написан
    Комментировать
  • Почему не происходит перерисовка компоненты?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Вы храните изменяете страницу в redux store, но нексту абсолютно всё равно, что у вас там лежит, он не узнает об этих изменениях

    Для роутинга в next js есть вот такие способы:
    1 - router.push
    2 - next/link
    Ответ написан
    2 комментария
  • Есть ли смысл разработки ASP.net+ react.js?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Не очень понимаю подобные вопросы
    Бэкендер делает бэкенд на языке N (в вашем случае, N = ASP.net), делает некие сервисы, которые умеют отвечать на http-запросы. Ему всё равно, что с этим будет делать фронтенд
    Фронтендер делает фронтенд на фреймворке N. Делает запросы к сервисам бэкенда, получает от них ответы. Ему всё равно, на чём написан бэкенд

    Фронту и бэку взаимно всё равно на технологии друг друга. Общаются они всё равно json-ами через запросы
    Ответ написан
    Комментировать
  • Зачем хранить результат запроса в Store?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Не очень понял. Запрос делается, когда требуется)

    Представим случай:
    У вас в одном компоненте есть список продуктов, который вы загружаете запросом к беку, А в другом компоненте есть надпись "найдено 1234 продуктов". Они на одной странице, но находятся далеко друг от друга, поэтому это разные компоненты

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

    React без редакса: найти/сделать какой-то родительский компонент, который будет "над" вашими двумя. В нём делать запрос, результат запроса прокидывать в нужные компоненты через пропсы. Есть очевидный минус: бывает, что между родительским компонентом и нужным компонентом есть ещё компонентов 5-6. Придётся прокидывать пропсы через каждый. Это захламляет проект. А если вам вдруг ещё в какой-то третий компонент нужно будет эти же данные прокинуть -- придётся переделывать

    React + redux (или любой другой стейт менеджер, не обязательно redux):
    В любом компоненте вызываете action, который делает запрос и сохраняет результат в store. Если какому-то компоненту нужны эти данные -- он делает connect к стору, берёт оттуда нужные данные и всё.

    То есть общая рекомендация: данные нужно хранить в сторе, когда они могут использоваться разными компонентами
    Ответ написан
    Комментировать
  • Как подгружать часть React бандла только при переходе по роуту?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Вебпак сам умеет неплохо код на чанки бить. Гуглить можно по названию опции splitChunks , я думаю
    Ответ написан
    4 комментария
  • React новичку. Как начать?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Верстать придётся в любом случае, да и на собеседованиях, особенно на джуна, часто вопросы по вёрстке.
    Может вы какие-то старые курсы учите? С flexbox и css grid адаптив не должен доставлять столько проблем.

    Реакт начать учить легко можно на официальном сайте - https://ru.reactjs.org/tutorial/tutorial.html

    Но если у вас любые задачи с большим объемом работы вызывают "выгорание" - подумайте, возможно, не стоит идти в программирование
    Ответ написан
    4 комментария
  • Как обновить рендер при обновления state redux?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Компонент должен ререндериться автоматически. Если нет -- видимо, у вас state.asideReducer.cart не изменяется, а мутирует. В таком случае, даже если в объекте изменились данные, ссылка на объект остаётся та же, редакс не видит изменения и не перерисовывает компонент
    Короче, покажите ваш редьюсер)
    Ответ написан
    Комментировать
  • Как в React передать в hoc стрелочную функцию?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    а, я наконец понял, что именно вы хотите сделать. Функции нельзя передать в children, получите ошибку Functions are not valid as a React child. Тут два варианта:
    1 - Передавать в children компонент, как в первом примере
    2 - Уйти от children в пользу передачи контента через функцию

    Условно
    class App extends Component {
      render() {
        const renderContent = params => { params.todos ? <h2>UserProfile</h2> : <div>Loading...</div> }
    
        return (
          <div className="App">
            <Twitter username='user1' renderContent={ renderContent } />
          </div>
        );
      }
    }

    Ну, и класс Twitter немножко дописать, в таком варианте он должен рендерить результат renderContent(this.state) , а не children

    Edit: первый ответ был не верный, обновил
    Ответ написан
  • ПОчему клик по файлу срабатывает 2 раза?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Хз, надо задавать этот вопрос либе react-file-reader :)
    Возможно, из-за того, что вы рендрите , а в примере у них button, но это просто гипотеза
    Ответ написан
    Комментировать
  • Потеря this в mapDispatchToProps. Почему dispatch не имеет его?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Блин, я даже не знаю, что сказать... Давайте по-порядку
    1) По каким материалам вы учите? Они точно не устарели? Меня очень смущает ваш constructor, потому что пропсы и так автоматически записываются в this.props. Получается, что вместо всего метода можно написать просто
    class Interface extends React.Component{
      elements = null;
    ...
    }


    2) Тут я могу быть не прав, но, насколько я помню React.createRef можно использовать только внутри классового компонента. Функция mapStateToProps никак не связана с вашим классом Interface, у неё совсем другой контекст

    3) Теперь непосредственно о вашей проблеме. Редьюсер, в котором находится switch/case никак не связан с вашим классом Interface. Советую ещё раз перечитать в документации как работает this. У вас он указывает на функцию, в которой вы к нему обращаетесь. Не могу подсказать точнее, потому что меня немного вводит в ступор строка dispatch(action){

    Могу сказать только три вещи:
    - Никогда не обновляйте стейт вот так: this.state.SOME_FIELD = ... . Используйте для этого только this.setState({ SOME_FIELD: ... }) . Иначе компонент может не отрисовать новые данные
    - Редьюсер и redux никак не связаны со стейтом и вашими классами. У них абсолютно разный контекст выполнения. this в Реакте работает точно так же, как и должен работать в JS-e
    - Очень советую пройти официальный туториал по реакту - ссылка
    Ответ написан
    2 комментария
  • Почему не срабатывает thunk?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Проблема в том, что вы вызываете функцию стандартным способом. Она возвращает вам вторую функцию (со вторым debugger), которую вы нигде не вызываете. Таким способом и не сможете, так как вам нужно как-то прокинуть в неё dispatch.

    Вы должны сделать connect (из react-redux) компонента App, примерно так:
    import { connect } from 'react-redux';
    // ...
    const mapDispatchToProps = {
      callInitTodosThunk: initTodosThunk
    }
    // ...
    function App(props) {
      const { initTodosThunk } = props
      callInitTodosThunk();
    
      return (
            <Header/>
      );
    }
    
    export default connect(null, mapDispatchToProps)(App);


    Либо использовать хук useDispatch, об этом способе можете погуглить
    Ответ написан
  • Нормально ли использовать данные из разных редюсеров стора в одном компоненте?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Абсолютно нормально
    Ответ написан
    Комментировать
  • Как сделать динамический route для главной страницы?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Для таких вещей используют get-параметры в урле. То есть урл вида domain.ru/page?1-k
    И в роутинге ничего отдельно прописывать не нужно
    Ответ написан
    Комментировать
  • Как рендерить страницу реакта в mern?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Есть два варианта:

    1 -- Гуглить, как делается SSR , чтобы рендерить страницу на сервере и отдавать в res.send уже готовую, полностью построенную страницу

    2 -- Просто воспользоваться res.sendFile('FILENAME') и отдать пустую страницу со скриптами (как раз ваш index.html), тогда реакт построит приложение уже на клиенте. Дока res.sendFile - тут
    Ответ написан
    Комментировать