Ответы пользователя по тегу React
  • Вопрос по теории useEffect?

    Raxen
    @Raxen
    TechLead Frontend Developer, Beeline
    Суть в том, что useEffect можно использовать по разному, если не передавать зависимости, то useEffect сработает до и будет работать на каждый рендер, даже можно использовать несколько useEffect в разных целях.

    useEffect(() => {
      // какой-то код
    }); // без указания второго аргумента работает на каждый "чих"
    
    useEffect(() => {
     // с пустым массивом зависимостей сработает аналогично componentDidMount, тут лучше фетчить
    }, []);
    
    useEffect(() => {
      console.log(props)
      // с зависимостями аналогично componentDidUpdate
    }, [props])
    
    useEffect(() => {
      // можно вернуть функцию, это будет аналогично componentWillUnmount
      return () => {
         // тут можно удалять всякие листнеры и слать события в стор, этот код сработает при размонтировании
      }
    }, []);


    P.S: удачи в собесах))
    Ответ написан
    1 комментарий
  • Можно ли не указывать функцию полченную из хука в зависимостях useEffect?

    Raxen
    @Raxen
    TechLead Frontend Developer, Beeline
    Расскажу один кейс, был у меня компонент, с хуками, все модно, один из сторонних хуков использовался в useEffect и постоянно менял свое состояние, что вызывало ререндер, по правилам eslint он должен был быть указан в deps, но при указании, приложение уходило в бесконечную перезагрузку.
    Указав в комментарии eslint что тут я сам решаю, что добавлять - избавился от проблемы.

    // eslint-disable-next-line react-hooks/exhaustive-deps
    Ответ написан
  • Как переотрисовать функциональный компонент после изменения роута?

    Raxen
    @Raxen
    TechLead Frontend Developer, Beeline
    Можно использовать хук роутера useLocation()

    Идея такая - подтягиваем хук, оборачиваем нужное место, которое должно ререндерится в useMemo с зависимостью от хука роутера

    Например -
    // импортируем хук useMemo
    import { useMemo } from "react";
    // импортируем хук useLocation
    import { useLocation } from "react-router-dom";
    
    const ContenWrapper: FC<ElementsIds> = memo(({ ids }) => {
      // Добавляем хук перемещений
      const { pathname } = useLocation();
    
      // Если нужен например этот компонент, чтоб ререндерились изменения, оборачиваем в хук useMemo
      const DashboardContent = useMemo(
        () => (
          <>
            <TitleStyled id={ids.content.contentTitleId}>
              {messages.title.default}
            </TitleStyled>
            <DescriptionStyled id={ids.content.contentDesctiptionId}>
              {messages.description.default}
            </DescriptionStyled>
          </>
        ), 
        [pathname] // Зависимость, при изменении которой произойдет ререндер
      );
    
      const GameContent = () => <TitleStyled>{"блаблабла"}</TitleStyled>;
    
      return (
        <ContentWrapperStyled id={ids.content.contentWrapperId}>
          <ScrollWrapperStyled id={ids.content.contentScrollWrapperId}>
            <Route path="/" render={DashboardContent} />
            <Route path="/game" render={GameContent} />
          </ScrollWrapperStyled>
        </ContentWrapperStyled>
      );
    });


    Только непонятно зачем если один компонент идет в один роут, а другой на другой, а на фоне они не работают
    Ответ написан
  • Я так никогда не выучу React. Что это за ошибка?

    Raxen
    @Raxen
    TechLead Frontend Developer, Beeline
    В 3 строке компилятор не понял написанной конструкции и предположил, что вы объявили Header как неприсвоенную константу, а после нее анонимная функция, поэтому предположил, что это не наследование, а перечисление констант и предложил поставить запятую после Header, но в вашем случае вы не написали знак присвоения (равно) для константы Header анонимной функции.
    const Header = () => {…}
    Ответ написан
    Комментировать
  • Как поменять цвет фона на выбранный пользователем?

    Raxen
    @Raxen
    TechLead Frontend Developer, Beeline
    Если у вас не возникает вопрос как пользователь выбирает цвет, значит с этой частью разработки вы знакомы, вот значит берете выбранное, пользователем, значение цвета (например переменная userColor) и кладете его например в хук useEffect
    useEffect(() => {
      document.body.style.backgroundColor = userColor;
    }, [userColor]);
    Ответ написан
    Комментировать
  • Mobile First в реакт, как организовать?

    Raxen
    @Raxen
    TechLead Frontend Developer, Beeline
    Вам пригодится react-responsive, пожалуйста.
    Ответ написан
    Комментировать
  • Почему при вызове события вешается на все элементы списка?

    Raxen
    @Raxen
    TechLead Frontend Developer, Beeline
    Вы выводите список итемов в компоненте с названием одного итема, соответственно состояние(state) у них всех общее
    Ответ написан
    Комментировать