reactjs - React-在设置状态之前检查是否安装了 cmp
问题描述
我已经读过,如果获取数据的 useEffect 的依赖数组包含道具,那么使用包含清理函数的空数组创建一个新的 useEffect 是一种更好的做法,但我不知道为什么。 ..
为什么我不能在原始 useEffect (被评论的那个)中留下清理和保存到 isMountedRef ?我看到这个的方式,当一个道具发生变化时,它无论如何都会重新渲染,因此在重新安装和重新渲染之前,cmp 将在短时间内卸载,因此它应该在那里改变 isMountedRef,而不是在带有空依赖数组的单独 useEffect 中...
谢谢!
const EditItem = () => {
const [isLoading, setIsLoading] = useState(true);
const [menuItem, setMenuItem] = useState({});
const isMountedRef = useRef(true);
const params = useParams();
useEffect(() => {
(async () => {
const data = await getMenuItem(params.menuItemId);
const { id, price, inStock, quantity, description, item} = data;
// if (isMountedRef.current) {
setMenuItem({
id,
price: price.toFixed(2),
inStock,
quantity: quantity.toString(),
description,
item,
});}();
// return () => {
// isMountedRef.current = false;
// };
}, [params.menuItemId]);
useEffect(() => {
return () => {
isMountedRef.current = false;
};
}, []);
解决方案
推荐阅读
- javascript - 有什么方法可以在窗口打开后立即使用变量弹出警报消息?
- security - phpmyadmin 下载 SHA256 不一致
- php - 使用 PHP 解析时,正则表达式未捕获新行或引号
- javascript - 多级引导导航栏:不能悬停在子元素上
- c++ - 对部分特化无效使用不完整类型
- css - 响应式网页在 Firefox 的开发模式下工作,但在我的 S9 Firefox 上却不行
- python-3.x - 如何为迭代 postOrder 遍历复制树以保护树
- regex - Laravel - 正则表达式路由匹配所有内容,但不完全匹配一个或多个单词
- python - 调用时出现 Python 描述符属性问题
- python - Pandas pd.Grouper 的 sum() 问题