joz*_*o22 8 html css prerender single-page-application reactjs
我使用React SPA Prerender来优化 SEO,但遇到了这个问题:
\n我有一个名为 的类HomeTitleContainer,专门用于文件Home.jsx,即主页。
import { Container } from \'react-bootstrap\';\nimport Link from \'../immutable/nav/Link\';\nimport \'./Home.css\';\n\nconst Home = () => {\n \n return (\n <>\n <Container className="HomeTitleContainer">\n Ma Th\xc3\xa9matique\n </Container>\n <Container className="TableOfContentsLink">\n <p><Link link={\'/cours\'} internalLink={true} >- Des cours de math\xc3\xa9matiques sur de nombreux sujets</Link></p>\n <p><Link link={\'/bds-de-jpp\'} internalLink={true} >- Des BDs de Jean-Petit</Link></p> \n <p><Link link={\'/jeux\'} internalLink={true} >- Des petits jeux pour s\'am\xc3\xa9liorer</Link></p> \n </Container>\n </>\n );\n}\n\nexport default Home;\nRun Code Online (Sandbox Code Playgroud)\n这是相应的 css 文件Home.css:
.HomeTitleContainer {\n position: relative;\n top: 30px;\n /* background-color: var(--front-color); */\n background-image: linear-gradient(to bottom right, var(--front-color), grey); \n border-radius: 10px;\n color: var(--links-color);\n font-size: large;\n padding: 30px;\n width: calc(var(--window-width) * 3 / 4);\n box-shadow: 20px 20px 5px 5px var(--navbar-color);\n margin-bottom: 100px;\n}\n\n@media (min-width : 450px) {\n .HomeTitleContainer {\n width: calc(var(--window-width) * 1 / 2);\n top: 50px;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这个HomeTitleContainer类不存在于其他任何地方。\n但是当我根据我的生成一些 html 文件时.rsp.json文件生成一些 html 文件时,这个类存在于所有其他生成的 html 文件中。
为了说明这一点,以课程页面为例......
\n所有页面都有一个目录,所以我使用这个文件GenericTableOfContents.jsx:
import { Container, Row, Col } from \'react-bootstrap\';\nimport Link from \'../immutable/nav/Link\';\n\nconst GenericTableOfContents = ( {items, prefix, title} ) => {\n\n return (\n <>\n <p className="MainTitle">{title}</p>\n <Row>\n {\n items.map(item => (\n <Container key={item.id} className="TableOfContents">\n <Col xs={12} md={12}>\n <div key={item.id} className="TableOfContentsLink" >\n <Link link={`/${prefix}/${item.relativePath}`} internalLink={true} >\n <div>{item.title}</div>\n </Link>\n </div>\n </Col>\n </Container>\n ))\n }\n </Row>\n </>\n )\n\n}\n\nexport default GenericTableOfContents;\nRun Code Online (Sandbox Code Playgroud)\n您可以看到 和MainTitle类TableOfContents应该是一个接一个。\n但是在 中cours.html,存在以下示例:
<p class="MainTitle">Tous les cours</p>\n<div class="HomeTitleContainer container">\n<div class="TableOfContents container"> ...\nRun Code Online (Sandbox Code Playgroud)\n尽管它不应该在那里,但HomeTitleContainer已经添加了一个带有该类的 div。
这里是.rsp.json:
{\n "port": 3000,\n "buildDirectory": "./build",\n "routes": [\n "/",\n "/cours",\n "/bds-de-jpp",\n "/jeux",\n "/liens"\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n这是路由文件 ( AppRoutes.jsx):
import { Route, Routes } from \'react-router-dom\';\nimport Home from \'./components/home/Home\';\nimport CoursesTableOfContents from \'./components/courses/CoursesTableOfContents\';\nimport ChaptersTableOfContents from \'./components/courses/ChaptersTableOfContents\';\nimport GenericChapter from \'./components/courses/GenericChapter\';\nimport PdfTableOfContents from \'./components/pdf-viewer/PdfTableOfContents\';\nimport PDFViewerPage from \'./components/pdf-viewer/PDFViewerPage\';\nimport GamesTableOfContents from \'./components/games/GamesTableOfContents\';\nimport Links from \'./components/links/Links\';\nimport VCard from \'./components/contact/VCard\';\nimport Error from \'./components/immutable/Error\';\n\nconst AppRoutes = ( {courseItems, pdfItems, gameItems} ) => {\n\n return <Routes>\n {\n process.env.NODE_ENV === \'development\' ?\n <Route exact path="/" element={<Home />} />\n : <Route exact path="/" element={<Home />} />\n }\n <Route path="/cours" element={<CoursesTableOfContents courseItems={courseItems} />} />\n {courseItems.map(courseItem => {\n return <Route \n key={courseItem.id}\n path={`/cours/${courseItem.relativePath}`}\n element={<ChaptersTableOfContents courseItem={courseItem} />} />\n \n })}\n {courseItems.map(courseItem => (\n courseItem.chapters.map(chapter => {\n return <Route \n key={chapter.id}\n path={`/cours/${courseItem.relativePath}/${chapter.relativePath}`}\n element={<GenericChapter chapter={chapter} courseItem={courseItem} />} />\n })\n ))}\n <Route path="/bds-de-jpp" element={<PdfTableOfContents pdfItems={pdfItems} />} />\n {pdfItems.map(pdfItem => (\n <Route \n key={pdfItem.id}\n path={`/bds-de-jpp/${pdfItem.relativePath}`}\n element={<PDFViewerPage pdfItem={pdfItem} />} />\n ))}\n <Route path="/jeux" element={<GamesTableOfContents gameItems={gameItems} />} />\n {gameItems.map(gameItem => (\n <Route \n key={gameItem.id}\n path={`/jeux/${gameItem.relativePath}`}\n element={gameItem.component} />\n ))}\n <Route path="/liens" element={<Links />} />\n <Route path="/contact" element={<VCard />} />\n <Route path="*" element={<Error />} status={404} />\n </Routes>\n}\n\nexport default AppRoutes;\nRun Code Online (Sandbox Code Playgroud)\n在 App.js 中添加:
\n var courseItems = coursesResourceBuilder();\n var pdfItems = pdfResourceBuilder();\n var gameItems = gamesResourceBuilder();\n <div className="App" > \n\n <div className={`${theme} ${font} CopyBook`}>\n <BrowserRouter>\n <Header courseItems = {courseItems} pdfItems ={pdfItems} gameItems={gameItems} /> \n <Container className = {` RelativeContainer ${playMode ? "PlayMode" : \'\'} ${isLoading ? "Blur" : \'\'} `} > \n <AppRoutes courseItems={courseItems} pdfItems={pdfItems} gameItems={gameItems} />\n </Container> \n <Footer /> \n </BrowserRouter>\n </div> \n\n </div>\nRun Code Online (Sandbox Code Playgroud)\n这是网站的网址:
\nhttps://ma-thematique.netlify.app
\nhttps://ma-thematique.netlify.app/cours
\n有人可以帮我吗?
\n您可以尝试使用Styled Components避免CSS全局申请:
import styled from 'styled-components';\n\nconst HomeTitleContainer = styled.span`\n position: relative;\n top: 30px;\n background-image: linear-gradient(to bottom right, var(--front-color), grey);\n border-radius: 10px;\n color: var(--links-color);\n font-size: large;\n padding: 30px;\n width: calc(var(--window-width) * 3 / 4);\n box-shadow: 20px 20px 5px 5px var(--navbar-color);\n margin-bottom: 100px;\n\n @media (min-width: 450px) {\n width: calc(var(--window-width) * 1 / 2);\n top: 50px;\n }\n`;\n\nexport default HomeTitleContainer;\nRun Code Online (Sandbox Code Playgroud)\n然后在你的组件内部Home:
import { Container } from 'react-bootstrap';\nimport Link from '../immutable/nav/Link';\nimport './Home.css';\nimport HomeTitleContainer from "./HomeTitleContainer";\nimport React, {Fragment} from "react";\n\nconst Home = () => (\n <Fragment>\n <Container>\n <HomeTitleContainer>\n Ma Th\xc3\xa9matique\n </HomeTitleContainer>\n </Container>\n\n <Container className="TableOfContentsLink">\n <p><Link link={'/cours'} internalLink={true} >- Des cours de math\xc3\xa9matiques sur de nombreux sujets</Link></p>\n <p><Link link={'/bds-de-jpp'} internalLink={true} >- Des BDs de Jean-Petit</Link></p> \n <p><Link link={'/jeux'} internalLink={true} >- Des petits jeux pour s'am\xc3\xa9liorer</Link></p> \n </Container>\n </Fragment>\n)\n\nexport default Home\nRun Code Online (Sandbox Code Playgroud)\n您能尝试一下并让我们知道结果是什么吗?
\n这里有两件事试图解决这个问题:
\nempty tag代替 -A FragmentFragment 允许您对子级进行分组,而无需向 DOM 添加额外的节点,并使您的组件结构和渲染逻辑更加清晰简洁。另一方面,空标签不提供这些好处,并且可能会导致额外的、不必要的 DOM 节点。这可能会导致一些异常行为,尤其是在旧版本的 React 中。CSS文件而不是styled-components. 如果您使用一个CSS文件,CSS 将全局应用,如果您不够小心,您可以轻松地使用在您的CSS文件之一中已定义属性的类名来渲染 div。| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |