Я хочу использовать 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;
Как мне решить эту проблему?
Проблема в том, что вы обновляете свое состояние при каждом рендеринге, и это вызывает новый повторный рендеринг. Вы должны обернуть это в хук \[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
}
})