页面内容未显示在页面源中



我试图从API获取内容并在页面中显示它。它的工作很好,但当我试图查看页面源代码,它不显示那些内容,我从API获得。我正在使用Next.js为这个项目和我所使用的代码如下。有人能帮我解决这个问题吗?

import React, { Fragment, useEffect, useState } from 'react'
import { API_BASE_URL } from '../Config/Settings'
import SideBar from '../Layouts/SideBar'
import Link from "next/link"
import Head from 'next/head'
import styles from '../styles/Home.module.css'
import axios from 'axios'

export const CmsPage = (props) => {    
const [PageHtmlContent, setPageContent] = useState('');
const [PageTitle, setPageTitle] = useState('');
const [PageDescription, setPageDescription] = useState('');
const [SeoKeyword,setSeoKeyword]=useState('');
useEffect( async() => {
let body = {pageTypeCode:props.pageType,pageName:props.pageName};
const config = {
headers: {
'x-auth-token':"rpsite-public-token" 
}
}
try {
const res= await axios.post(API_BASE_URL+'/api/cms/page',body,config);
// alert(res.data.content);
setPageContent(res.data.content);
setPageTitle(res.data.seoTitle);
setPageDescription(res.data.seoDescription);
setSeoKeyword(res.data.seoKeyword);
}
catch(err) {
setPageContent('<b>Something went wrong!</b>');
}

},[props]);
return (
<section class="inner-body-section">
<Head>
<title>{PageTitle}</title>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<meta name="keywords" content={SeoKeyword} />
<meta name="description" content={PageDescription}/>
</Head>
<div class="container">
<div class="row">
<div class="col-md-3">
<SideBar/>
</div>
<div class="col-md-9">
<div className="inner-body-content">
<div id="contentBlock" className="page-content" dangerouslySetInnerHTML={{__html:PageHtmlContent}}></div>
</div>
</div> 
</div>
</div>
</section>  
)
}
export default CmsPage;

查看View Page Source时得到的是服务器返回的HTML。

因为您正在发出请求并在useEffect中填充数据,这将只发生在客户端,因此数据在页面的源中不可见。

如果您希望在服务器上填充数据,您可能需要查看getStaticPropsgetServerSideProps


下面是如何使用getStaticProps在服务器端填充数据的示例(getServerSideProps也可以使用类似的方法)。

export async function getStaticProps(context) {
const res = await axios.post(`${API_BASE_URL}/api/cms/page`);

// Assuming `res.data` format: { content, seoTitle, seoDescription, seoKeyword }
return { 
props: res.data 
};
}
const CmsPage = ({ content, seoTitle, seoDescription, seoKeyword }) => {
return (
<>
<Head>
<title>{seoTitle}</title>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<meta name="keywords" content={seoKeyword} />
<meta name="description" content={seoDescription}/>
</Head>
<section class="inner-body-section">
<div class="container">
<div class="row">
<div class="col-md-3">
<SideBar/>
</div>
<div class="col-md-9">
<div className="inner-body-content">
<div id="contentBlock" className="page-content" dangerouslySetInnerHTML={{__html: content}}></div>
</div>
</div> 
</div>
</div>
</section>
</>
)
}
export default CmsPage;

最新更新