perf: ssr

This commit is contained in:
archer
2023-06-13 20:07:32 +08:00
parent 89e7c1abca
commit 391332c8dd
8 changed files with 53 additions and 46 deletions

View File

@@ -1,12 +1,10 @@
function Error({ errStr }: { errStr: string }) {
return <p>{errStr}</p>;
function Error() {
return (
<p>
safari chrome
</p>
);
}
Error.getInitialProps = ({ res, err }: { res: any; err: any }) => {
console.log(err);
return {
errStr: `部分系统不兼容,导致页面崩溃。如果可以,请联系作者,反馈下具体操作和页面。大部分是 苹果 的 safari 浏览器导致,可以尝试更换 chrome 浏览器。`
};
};
export default Error;

View File

@@ -9,9 +9,14 @@ import { useToast } from '@/hooks/useToast';
import { useQuery } from '@tanstack/react-query';
import { useUserStore } from '@/store/user';
import { MyModelsTypeEnum } from '@/constants/user';
import dynamic from 'next/dynamic';
import Avatar from '@/components/Avatar';
import Tabs from '@/components/Tabs';
const Avatar = dynamic(() => import('@/components/Avatar'), {
ssr: true
});
const Tabs = dynamic(() => import('@/components/Tabs'), {
ssr: true
});
const ModelList = ({ modelId }: { modelId: string }) => {
const [currentTab, setCurrentTab] = useState(MyModelsTypeEnum.my);

View File

@@ -47,10 +47,10 @@ import { defaultShareChat } from '@/constants/model';
import type { ShareChatEditType } from '@/types/model';
import type { ModelSchema } from '@/types/mongoSchema';
import { formatTimeToChatTime, useCopyData, getErrText } from '@/utils/tools';
import MyIcon from '@/components/Icon';
import { useGlobalStore } from '@/store/global';
import { useUserStore } from '@/store/user';
import Avatar from '@/components/Avatar';
import MyIcon from '@/components/Icon';
const ModelEditForm = ({
formHooks,
@@ -174,32 +174,6 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
// init kb select list
const { data: kbList = [] } = useQuery(['loadKbList'], () => loadKbList());
const RenderSelectedKbList = useCallback(() => {
const kbs = getValues('chat.relatedKbs')?.map((id) => kbList.find((kb) => kb._id === id)) || [];
return (
<>
{kbs.map((item) =>
item ? (
<Card
key={item._id}
p={3}
mt={3}
cursor={'pointer'}
onClick={() => router.push(`/kb?kbId=${item._id}`)}
>
<Flex alignItems={'center'}>
<Avatar src={item.avatar} w={'20px'} h={'20px'}></Avatar>
<Box ml={3} fontWeight={'bold'}>
{item.name}
</Box>
</Flex>
</Card>
) : null
)}
</>
);
}, [getValues, kbList, router]);
return (
<>
@@ -353,7 +327,6 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
</Select>
</Flex>
)}
<Box mt={4}>
<Box mb={1}></Box>
<Textarea
@@ -408,7 +381,32 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
</Button>
</Flex>
<RenderSelectedKbList />
{(() => {
const kbs =
getValues('chat.relatedKbs')?.map((id) => kbList.find((kb) => kb._id === id)) || [];
return (
<>
{kbs.map((item) =>
item ? (
<Card
key={item._id}
p={3}
mt={3}
cursor={'pointer'}
onClick={() => router.push(`/kb?kbId=${item._id}`)}
>
<Flex alignItems={'center'}>
<Avatar src={item.avatar} w={'20px'} h={'20px'}></Avatar>
<Box ml={3} fontWeight={'bold'}>
{item.name}
</Box>
</Flex>
</Card>
) : null
)}
</>
);
})()}
</Card>
</>
)}
@@ -586,7 +584,6 @@ ${e.password ? `密码为: ${e.password}` : ''}`;
isChecked={getValues('chat.relatedKbs')?.includes(item._id)}
onChange={(e) => {
const ids = getValues('chat.relatedKbs');
// toggle to true
if (e.target.checked) {
setValue('chat.relatedKbs', ids.concat(item._id));
} else {

View File

@@ -8,7 +8,13 @@ import { useForm } from 'react-hook-form';
import { useQuery } from '@tanstack/react-query';
import { useUserStore } from '@/store/user';
import { useLoading } from '@/hooks/useLoading';
import ModelEditForm from './components/ModelEditForm';
import Loading from '@/components/Loading';
import dynamic from 'next/dynamic';
const ModelEditForm = dynamic(() => import('./components/ModelEditForm'), {
loading: () => <Loading fixed={false} />,
ssr: false
});
const ModelDetail = ({ modelId, isPc }: { modelId: string; isPc: boolean }) => {
const { toast } = useToast();

View File

@@ -10,7 +10,7 @@ import SideBar from '@/components/SideBar';
const ModelDetail = dynamic(() => import('./components/detail/index'), {
loading: () => <Loading fixed={false} />,
ssr: false
ssr: true
});
const Model = ({ modelId }: { modelId: string }) => {