Слишком много проблем с повторным рендерингом в реагирующих хуках

Я хочу использовать UseState, чтобы разделить экран чата на Container и Presenter. Но у меня уже два дня слишком много проблем с рендерингом.

Это контейнер.jsx

import React, { useState } from "react";
import ChatsPresenter from "./ChatPresenter";

const ChatContainer = () => {
  const [title, setTitle] = useState({
    user: [""],
  });
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  try {
  } catch (e) {
    setError({ e: "에러가 났어요😥" });
  } finally {
    setLoading({ loading: false });
  }

  return (
    <>
      <ChatsPresenter>{title.user}</ChatsPresenter>
    </>
  );
};

export default ChatContainer;

Это Presenter.jsx

import React from "react";
import styled from "styled-components";
import Loading from "../Loading";

const ChatsPresenter = ({ title, loading, error }) => {
  return (
    <>
      {loading ? (
        <Loading />
      ) : (
        <>
          <Container title = "Kim" />
        </>
      )}
    </>
  );
};

export default ChatsPresenter;
const Container = styled.div`
  font-size: 14px;
`;

Это index.jsx

import ChatContainer from "./ChatContainer";
export default ChatContainer;

Как мне решить эту проблему?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
108
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проблема в том, что вы обновляете свое состояние при каждом рендеринге, и это вызывает новый повторный рендеринг. Вы должны обернуть это в хук \[useEffect\], если вы хотите запустить его только один раз.

useEffect(() => {

      try {
      } catch (e) {
        setError({ e: "에러가 났어요😥" });
      } finally {
        setLoading({ loading: false });
      }
}, [])

проблема в следующем коде:

 try {
  } catch (e) {
    setError({ e: "에러가 났어요😥" });
  } finally {
    setLoading({ loading: false });
  }

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

useEffect(() => {
  if (error){
   //set your states
 }
})

Другие вопросы по теме