reactjs - react-hooks 中的重新渲染问题太多
问题描述
我想使用 UseState 将聊天屏幕拆分为 Container 和 Presenter。但是我这两天经历了太多的渲染问题。
这是 Container.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 });
}
}, [])
推荐阅读
- javascript - 来自多个 URL 的 AJAX 请求
- c++ - 将十进制数分成两半
- python - 参数化 Pandas 中的列名
- ruby-on-rails - Rails Active Record:has_many 使用自定义 id
- javascript - Angular CDKScrollable 未触发
- spring-boot - 具有持久共享订阅的 Artemis JUnit
- gcloud - 如何在 Google Cloud 中创建或查找 SERVICE_PROJECT_ID?
- ios - 将项目插入数据库(核心数据)时,集合视图不显示项目
- powershell - 通过 powershell 和 appcmd 在 docker 中向 IIS 添加压缩级别失败并显示错误:格式错误的集合索引器
- windows - SetThreadExecutionState(ES_DISPLAY_REQUIRED) 不会重新打开屏幕