reactjs - 避免在每次渲染 react-modal 时重新创建 body 组件
问题描述
我正在使用这个库来创建一个模态
我有 3 个组件Table
:Modal
和List
Table
has Modal
(a custom React Modal
), and body of Modal
will be List
. 现在的问题是,List
有一些改变状态的功能Table
,所以当我做一些可以改变状态的事情Table
,Table
并且Modal
在重新渲染时Modal
会重新渲染,它会重新创建一个新的List
,这会导致丢失所有我正在做的事情List
。
这是我的应用程序的简单版本。关联
现在我不想List
在每次Modal
重新渲染时都重新创建。有什么办法可以存档吗?(在这种情况下,我不想自己创建模态或使用全局状态管理)
import { useEffect, useMemo, useState } from "react";
import ReactModal from "react-modal";
ReactModal.setAppElement("#root");
const List = ({ onClick }) => {
useEffect(() => {
console.log("List is mounted");
}, []);
return <button onClick={onClick}>Click me!</button>;
};
const Modal = ({ state, body, isOpen }) => {
useEffect(() => {
console.log("Modal is re-rendered");
});
return (
<div
id="react modal wrapper"
style={{
display: `${isOpen ? "block" : "none"}`
}}
>
<ReactModal isOpen={isOpen}>
<div>
state is {state}
<br />
{body}
</div>
</ReactModal>
</div>
);
};
const Table = ({ state, onClick, isOpen }) => {
useEffect(() => {
console.log("Table is re-rendered");
});
const memorizedList = useMemo(() => <List onClick={onClick} />, []);
return (
<div>
state: {state}
<Modal state={state} body={memorizedList} isOpen={isOpen} />
</div>
);
};
const App = () => {
const [state, setState] = useState(1);
const onClick = () => setState((v) => v + 1);
return (
<div>
<button onClick={onClick}>Change state</button>
<Table state={state} onClick={onClick} isOpen={state % 2 === 0} />
</div>
);
};
export default App;
解决方案
推荐阅读
- javascript - 在Javascript中添加元素时的动态div
- wordpress - 有没有办法一次编辑所有优惠券的“使用限制”?
- python - VS Code Python unittest:即使遵循教程也没有发现任何测试
- excel - 1989 年之后使用 DateSerial 时 VBA 调用错误 6 溢出
- eclipse - Codewarrior 的命令行界面停止等待对话框
- ios - 未定义的符号:_OBJC_CLASS_$_XBarChart
- ios - Swift 4 - 对齐 UILabel 视图的两列
- elasticsearch - 如何根据日期范围找到一个字段的不同值?弹性搜索 6.3
- javascript - 为开发和运行时构建 Vue,仅用于 Chrome 应用程序
- css - 覆盖某些行的引导表悬停