Closed chentianxin closed 1 year ago
第 2 点,没问题的,你在 render 里面打印肯定都会有日志,要看你的 dom 有没有被保持才对。
import { Header, Page, Content } from '@alita/flow';
import { useIsLogged } from '@/valtio/profile';
import { useClientLoaderData } from 'alita';
import { useState } from 'react';
export async function clientLoader() {
const { Data } = await Promise.resolve({ Data: 123 });
return Data;
}
export default function HomePage() {
const isLogin = useIsLogged();
console.log(isLogin);
const clientLoaderData = useClientLoaderData();
console.log('index renderer', clientLoaderData);
const [count, setCount] = useState(0);
return (
<Page>
<Header onClick={() => setCount(count + 1)}>Index Page Header</Header>
{count}
<Content>
Index Page Content
<div>clientLoader data {clientLoaderData.data}</div>
</Content>
</Page>
);
}
clientLoader好像有重新请求,clientLoader是进页面就请求,还是挂载前请求一次呢 我觉得如果页面keepalive的话 clientLoader只会执行一次吧 直到页面unmountd,重新load才会请求
问题1,你最终返回了 Navigate 被保持住了,所以会一直重定向,我也没想好改怎么处理,你可以先这么改下,我再想想。
export default function AuthWrapper() {
if (useIsLogged()) {
return <Outlet />;
} else {
setTimeout(() => {
history.push('/login');
}, 10);
return <Outlet />;
}
}
好的 谢谢
问题1,你最终返回了 Navigate 被保持住了,所以会一直重定向,我也没想好改怎么处理,你可以先这么改下,我再想想。
export default function AuthWrapper() { if (useIsLogged()) { return <Outlet />; } else { setTimeout(() => { history.push('/login'); }, 10); return <Outlet />; } }
clientLoader好像有重新请求,clientLoader是进页面就请求,还是挂载前请求一次呢 我觉得如果页面keepalive的话 clientLoader只会执行一次吧 直到页面unmountd,重新load才会请求
那就是 keepalive 和 clientLoader 一起使用的问题了。我还没用过 clientLoader ,找个时间试验下。
会监听路由变化,重新请求。
会监听路由变化,重新请求。
好吧 那就算我用错特性了
好吧 那就算我用错特性了
感觉是 umi bug,我去看看。讲道理,做了判断,应该不会重复请求的。
clientLoader 重复请求的修复 https://github.com/umijs/umi/pull/9960
@chentianxin 被保持的页面,不能 return Navigate,这个要在写法上规避,程序上找不到点能做这个事情。
demo test_keepalive.zip
问题