Ответы пользователя по тегу React
  • Опыт Angular релевантен React'у?

    @dimoff66
    Кратко о себе: Я есть
    Миддл и джун не имеют отношения к системе.

    Миддл - умение писать качественный код.
    Сеньор - умение строить грамотную архитектуру приложений.

    Что будет через два года - это гадание на кофейной гуще и смысла не имеет. Это как бегать из одной очереди в другую в супермаркете, пытаясь угадать, какая быстрее подойдет. Итог обычно таков, что быстрее подходит как раз та, из которой вы дернулись.

    Все востребовано. Просто делайте что вам нравится. В этом отличие сеньора от джуна - он спокоен, не дергается и уверен в себе.
    Ответ написан
  • Как объявить общую переменную в React и использовать ее для рендера отдельных компонент?

    @dimoff66
    Кратко о себе: Я есть
    Объявляете обычную переменную типа объект и просовываете ее в дочерние через свойства или через useContext. В любое из ее свойств пишете нужное вам значение, это не запустит обновления. И добавляете таймаут, который отслеживает изменение.

    Это конечно если не использовать redux

    Но вообще непонятно в чем проблема перерендеринга всех детей? У вас их так много, что приложение тормозит или что?
    Ответ написан
  • Как вывести переменные из componentDidMount?

    @dimoff66
    Кратко о себе: Я есть
    state не меняется моментально после this.setState, если вы хотите получить новые значения, то

    const data = await response.json();
    this.setState({ info: data });
    const artistname = data.artist.name;
    const title = data.info.title;
    Ответ написан
    5 комментариев
  • Как правильно выводить в state ответ от сервера react?

    @dimoff66
    Кратко о себе: Я есть
    Да. Все что влияет на отрисовку компонента и меняет значение за время жизненного цикла, должно быть внутри стейт
    Ответ написан
    Комментировать
  • Почему не меняется состояние компонента в React?

    @dimoff66
    Кратко о себе: Я есть
    Строчка
    todo.completed = !todo.completed
    выполняется при каждом клике дважды, поэтому сначала значение становится false, затем снова true, в то время как текстовая переменная прекрасно меняется. Мне немного стыдно, поскольку точно не знаю механизм работы реакта в данном случае, но выхода тут два:
    1)
    if (todo.id === id) return { ...todo, completed: !todo.completed }
    return todo


    Что в действительности более правильно, так как каждый изменяемый элемент в реакте должен менять ссылку при изменении.

    2) Вычислять новый completed сразу
    onChange={() => props.handleChange(props.item.id, !props.item.completed)}


    и уже в функции пользоваться полученным значением
    handleChange(id, newCompleted) {
          this.setState(prevState => {
            
              const updatedTodos = prevState.todos.map(todo => {
                  if (todo.id === id) {
                    todo.completed = newCompleted 
                  }
                  return todo
              })
              return {
                  todos: updatedTodos
              }
          })
    Ответ написан
    6 комментариев
  • Почему не изменяется state при использовании хука useState?

    @dimoff66
    Кратко о себе: Я есть
    В коде
    1) onAddBtn ни откуда не вызывается, повесьте ее на кнопку с плюсом на событие onClick, чтобы она срабатывала
    2) isAdding никуда не выводится, как вы узнаете, что она не срабатывает?

    Если повесить ее на кнопку и вывести результат, то окажется, что все замечательно меняется
    Ответ написан
  • Почему стейт чекбокса обновляется таким образом?

    @dimoff66
    Кратко о себе: Я есть
    Потому что rejectedStatuses содержит состояние на момент последнего рендеринга. Оно не может измениться от вызова setRejectedStatuses ну хотя бы потому что это константа. А вы проверяете его значение немедленно после вызова функции установки, словно константа раз и поменяется. Оно поменяется при следующем вызове функции компонента, то есть после рендеринга, вызванного сменой состояния.
    Ответ написан
    Комментировать
  • Как в React правильно реализовать удаление элемента?

    @dimoff66
    Кратко о себе: Я есть
    Модалку вывести на уровень App, одной модалки на приложение достаточно, по нажатии на кнопку ее активируете.
    Ответ написан
    Комментировать
  • Где хранять токены React js + Rest api php?

    @dimoff66
    Кратко о себе: Я есть
    jwt можно хранить в sessionStorage
    Ответ написан
    Комментировать
  • Как заставить обновляться компоненту?

    @dimoff66
    Кратко о себе: Я есть
    UpdateCount разкомментируйте и не забываем ставить кол-во миллисекунд в setInterval

    componentDidMount() {
      setInterval(() => {
        this.updateCount()
      }, 1000) 
    }
    Ответ написан
    1 комментарий
  • Как правильно навешивать класс активной кнопке в React/Redux?

    @dimoff66
    Кратко о себе: Я есть
    Умный компонент должен читать свойство из стора, куда пишется имя кнопки и передавать булево значение в глупый компонент Method, Который в зависимости от этого глупого значения добавляет к кнопке класс active или нет.

    export default function Method({title, description, name, isActive}) {
    
    ...
           <Button
              name={name}
              className={style.button + (isActive ? ' active-class' : '')}


    Либо как вариант передавать activeName в Method и там уже сравнивать

    export default function Method({title, description, name, activeName}) {
      const isActive = name === ActiveName 
    ...
           <Button
              name={name}
              className={style.button + (isActive ? ' active-class' : '')}


    Но вообще сохранение активной кнопки в стор не кажется очевидным, возможно достаточно хранить имя активной кнопки в стейте умного компонента, ибо стор нужен когда необходимо сохранить значение активной кнопки между вызовами компонента или когда нужно его передать в другие компоненты.
    Ответ написан
    1 комментарий
  • Как одновременно использовать более одного React-компонента, если только один Reducer?

    @dimoff66
    Кратко о себе: Я есть
    Если сортировка данных относится только к текущему компоненту, ее можно хранить в стейте компонента. В редаксе имеет смысл хранить только те данные, которыми пользуются несколько компонентов или которые нужно сохранить между сеансами. Если все же есть необходимость хранить сортировки и отборы именно в хранилище редакса, то просто создайте какие-то уникальные для компонента ключи и храните в них

    {
      items: [],
      settings: {
        key1: { filter: {}, sort: {}, page: 2 },
        key2: { filter: {}, sort: {}, page: 1 },
      }
    }
    Ответ написан
    Комментировать
  • Как записать в переменную html-элемент отрендеренную Реактом?

    @dimoff66
    Кратко о себе: Я есть
    С помощью ref-ов
    https://learn-reactjs.ru/core/refs-and-the-dom

    Пример:

    class MyComponent extends React.Component {
        constructor(props) {
          super(props);
          this.myRef = React.createRef();
        }
        render() {
          return <div className={"someClass"} ref={this.myRef} />;
        }
      }


    this.myRef.current будет содержать ссылку на элемент с классом someClass
    Ответ написан
    2 комментария
  • Как обновить компонент при изменении state?

    @dimoff66
    Кратко о себе: Я есть
    Первое правило Redux - всегда спредить изменяемую величину, иначе редакс не знает, что вы ее поменяли. Используемый вами метод splice не меняет массив, да и map в данном случае бессмысленен. Верный код будет таким:

    const index = state.tasksData.findIndex(({ ID }) => ID === payload.ID)
    if (index > -1) return {
      ...state,
      tasksData: 
        state.tasksData.slice(0, index).concat(
          state.tasksData.slice(index + 1))
    }
    Ответ написан
  • Как делать корзины для больших интернет магазинов?

    @dimoff66
    Кратко о себе: Я есть
    Таблицы
    categories: id, name, parentId (если их немного то можно подгрузить все сразу)

    products: id, name, categoryId (подгружать по частям, либо пагинацией, либо динамической подгрузкой при прокрутке, для реакта есть табличные компоненты, которые динамическую подгрузку осуществляют сами)

    cart: userId, productId, quantity (при загрузке подгрузить количество позиций, чтобы выводить его в шапке сайта, при открытии корзины подгрузить с сервера всю информацию с наименованием, ценами и чем-то еще, можно хранить в LocalStorage для незарегистрированных пользователей)
    Ответ написан
  • Как поочередно вызвать компоненты?

    @dimoff66
    Кратко о себе: Я есть
    компоненты запускаются только исходя из данных, вы не можете запускать их вручную. Вы можете в главном компоненте сделать свойство состояния

    const App = () => {
      const [showComponent, changeShowComponent] = useState(0)
      return <div>
        <button onClick={() => changeShowComponent(1)}>Начинаем</button>
        {showComponent === 1 && <FirstModalComponent changeShowComponent />}
        {showComponent === 2 && <SecondModalComponent changeShowComponent />}
      </div>
    }


    Соответственно внутри первого модального компонента в нужный момент вызываете переданную в него функцию changeShowComponent(2)и все перерисуется, первый компонент исчезнет, второй появится
    Ответ написан
    1 комментарий
  • Как решить данную проблему React js?

    @dimoff66
    Кратко о себе: Я есть
    Выводить header по условию, в зависимости от location, Если перед открытием вашего компонента меняется адрес, или завести переменную в state или в store, которую менять перед переходом к компоненту stories.
    Ответ написан
    Комментировать
  • Нужно ли рефакторить код?

    @dimoff66
    Кратко о себе: Я есть
    Большинство программистов, в том числе те, кто будет вас собеседовать - как мартышки, им сказали что правильно так и так, они не задумываясь передают это дальше и бьют по голове каждого, кто осмеливается делать не по шаблону. Вся эта возня с экшинами и типами безусловно избыточна в редаксе в 95% случаев. Я вообще делал надстройку, чтобы напрямую вызывались процедуры, изменяющие стейт. Хотя не рискнул бы выложить это в качестве портфолио, по упомянутым выше причинам.

    В самом вашем коде ничего плохого нет, вы можете оставить его, в комментариях пояснив, что вынос экшинов в отдельный файл в данном случае ведет к избыточному бойлерплейту. Единственное все же нагляднее, если mapStateToProps и MapDispatchToProps вынесены на верх, а не вставлены в коннект непосредственно.
    Ответ написан
  • Почему create-react-app создает столько файлов?

    @dimoff66
    Кратко о себе: Я есть
    create-react-app appName создает пустое приложение, из которого новичку нужны только файлы app.js и app.css, как старт для разработки. Все прочие файлы системные либо дополнительные библиотеки. node_modules содержит тысячи полезных-бесполезных библиотек, но туда заглядывать большого смысла нет, разве что по желанию в ознакомительных целях.
    Ответ написан
  • Можете подкинуть варианты проекта на React/Redux?

    @dimoff66
    Кратко о себе: Я есть
    Я когда учился, делал универсальную таблицу с возможностью группировки, отбора, сортировки строк, подсчетом итоговых значений. Это очень немаленький проект и хорошо прокачивает. Естественно без использования готовых ui компонентов
    Ответ написан