我正在阅读React路由器中的静态与动态路由,我正在努力识别后者的优势(以及为什么v4选择使用它).我可以看到列出应用程序的所有路由(静态)的优势,以及每个路由映射到的组件,允许您跟踪给定特定URL的内容.但我没有看到动态路线有任何明显的优势.
如果有的话,我只能看到缺点,因为没有明确的方法来查看URL将映射到什么状态,而无需从根应用程序元素开始并按照路径进行操作(尽管我可能会弄错).
动态路由解决了什么情况?为什么它更适合静态路由(可能特别是在React应用程序中)?
更新:
getServerSideProps?index.js在产品文件夹下执行此操作,它有效,这意味着它可以与 [category_slug] 配合使用getServerSideprops,对吗?这是我的文件夹结构
pages
|-categories
|-[category_slug]
|-index.js
|-product
|-[product_slug].js
Run Code Online (Sandbox Code Playgroud)
当我输入时,它会导致错误[product_slug]。显示:
错误:未在 /categories/[category_slug]/product/[product_slug] 的 getStaticPaths 中以字符串形式提供所需参数 (category_slug)
这可以在 Next.js 中执行嵌套路由文件夹吗?我找不到这方面的任何信息。我在下面展示我的代码。
pages
|-categories
|-[category_slug]
|-index.js
|-product
|-[product_slug].js
Run Code Online (Sandbox Code Playgroud)
我尝试向 提供硬编码值[category_slug]。这样的话就正确了吗?我也不确定。我在文档中找不到此内容。
// [product_slug].js
export async function getStaticProps({ params: { product_slug } }) {
const product_res = await fetch(
`${API_URL}/products/?product_slug=${product_slug}`
); // question mark is query slug, to find the slug in the json
const found = await product_res.json();
return …Run Code Online (Sandbox Code Playgroud) 我们如何在 nextjs 13 中使用布局进行动态路由?
我在新的下一页应用程序中有一个目录,我在其中尝试进行动态路由:app/dashboard/[id].jsx,但是它不适用于仪表板布局。
我该怎么做?普通页面的工作方式是这样的app/dashboard/pages.jsx,但是我们如何做动态路由,在其中我也可以获得 id 呢?
我试图在不使用查询字符串的情况下检索 url 参数,例如,http://localhost:3000/test/1这是我到目前为止所拥有的:
目录结构
test
- [pageNumber].jsx
Run Code Online (Sandbox Code Playgroud)
索引.jsx
import React from 'react';
import { useRouter } from 'next/router';
const Index = () => {
const router = useRouter();
return (
<>
<h1>Page number: {router.query.pageNumber}</h1>
</>
);
};
export default Index;
Run Code Online (Sandbox Code Playgroud)
它可以工作,但如果我省略 pageNumber 参数,我得到的只是 404 页面,这是我们使用查询字符串时不存在的问题。
现在的问题是:是否可以在不创建额外的 index.jsx 页面和重复代码来处理空参数场景的情况下对此进行排序?
如何在 NextJS 中实现动态子域路由功能?
abc示例:如果用户在站点中提供用户名,xyz那么他可以访问他的站点abc.xyz.com
另外,如果用户有abc.com域,那么他可以指向abc.com“abc.xyz.com
所以”,如果将来有人打开abc.com,则abc.xyz.com可以提供服务。URL 中也abc.com显示了。
我调查了 NPM 中的一些插件,例如 vhost 和通配符子域,但不确定这是解决此问题的正确方法。
虚拟主机需要对hosts本地系统中的系统进行更改,而通配符子域纯粹通过路由解决了问题。
本地系统设置我已经使用暂时有效的代码自定义了Server.js,但似乎不是可以在生产中使用的解决方案:
服务器.js
...
if (pathname === "/demo.demo.com") {
app.render(req, res, "/demo.demo.com", query);
}
...
Run Code Online (Sandbox Code Playgroud)
在_app.js中
static async getInitialProps(appArgument) {
...
return {
...
renderFrom: "demo.demo.com"
};
}
Run Code Online (Sandbox Code Playgroud)
在我的主机中我也demo.demo.com指出了localhost。
该网站适用于我,demo.demo.com:3000但如何使用数据库和CNAME记录将其推广到生产场景中,并使用用户操作自动添加/更改 CNAME 记录。
我已经在整个互联网上搜索了我的问题的答案。到目前为止还没有运气。
我想要实现的目标:我有一个在通用模式下运行的 Nuxt 应用程序。它就像一个小型社交网络,用户可以在其中创建自己的个人资料并分享他们的工作。
因此,我正在使用动态路由(users/_id.vue)从 url 获取参数并从我的数据库(firebase)获取适当的数据。到目前为止,一切都很好。
我想用静态主机(Netlify 或 Zeit Now)托管它,并且我知道可以通过生成配置呈现动态路由。但这不是我想要的。对于这个特定的路线,我可以使用空 shell,然后异步 Javascript 访问 API 并用数据填充 shell。SEO 在这里并不重要,因为配置文件无论如何都在身份验证后面。
我需要的只是 Nuxt 生成一个“捕获所有”文件,然后呈现用户配置文件客户端(users/martha 或 users/johndoe)。Gridsome 通过从 _id.vue 文件中渲染 _id.html 来实现这一点。Nuxt 也有办法做同样的事情吗?
谢谢你在这里帮助我。
当我在 my 中nuxt generate运行时,我的动态创建的路由不接受它们的有效负载,它们的负载如下:target: "static"nuxt.config.js
****nuxt.config.js****
generate: {
routes() {
return axios
.get(`${process.env.ROOT_URL}/businesses`)
.then(res => {
return res.data.map(business => {
return {
route: `/business/${business.id}`,
payload: business
};
});
});
}
}
****business.vue****
async asyncData({ params, store, error, payload }) {
if (payload) {
console.log('GOT PAYLOAD!', payload);
return { business: payload };
} else {
// other stuff
}
})
Run Code Online (Sandbox Code Playgroud)
nuxt generate在上面的 console.log中,每个动态路由都会被命中,所以我知道它正在接收正确的负载。
nuxt generate在我的dist文件夹为每个动态路由都有一个子文件夹之后,但index.html每个动态路由内部只有几行,当我在浏览器上访问每个动态路由的页面时,不会出现特定于动态路由的内容(我的组件中的导航栏layout显示正常) )。
应用程序中的导航工作正常,因此,如果我转到不同的页面并进入我的动态路线内容页面,将会出现,所以asyncData有效,接受有效负载是麻烦。 …
我正在使用 Next.js 构建 LMS。到目前为止我的项目结构是localhost/courses/1。每门课程有 7 页。仪表板、作业、测试和测验、成绩册、资源、公告和花名册。我已准备好所有组件和页面。因此,如果我手动转到localhost/courses/1/assignments或localhost/courses/1323/roster等,则效果很好。
我想要做的是:当我单击作业链接时,我需要转到该特定课程的作业页面 - 类似localhost/courses/1/assignments. 目前,我已将 URL 硬编码为,/courses/1/[page]因此如果我单击指派,它将转到localhost/courses/1/assignment,或者如果我单击名册,它将转到localhost/courses/1/roster。
如何使该路线动态化,以便当用户单击课程内的某个选项卡时,会将他们带到该特定课程的该页面?
我抬起头next/link,next/router但我仍然做不到。有什么帮助吗?
编辑:这是我的文件夹结构:
就像我上面说的,现在我已经使用链接将某人发送给/courses/1/assignment例如。
如果您想查看该网站,它托管在我的应用程序中。
import Image from 'next/image';
import tools from "./sidebarData";
import SideBarItem from "./SidebarItem";
function Sidebar() {
return (
<div className="flex mt-8 ml-20">
<div className="">
<ul>
{Object.entries(tools).map(([key, {title, url, icon}]) => (
<SideBarItem key={key} title={title} Icon={icon} url={url}/>
))}
</ul>
</div>
</div>
)
} …Run Code Online (Sandbox Code Playgroud)这是我的下一个 js 项目的一部分。该网站在 localhost 上完美运行,但当我将其部署在 vercel 上时,/blogs/book/chapter 页面给出文件未找到,在此处输入图像描述 500 错误。
import fs from "fs";
import path from "path";
import Head from "next/head";
import DefaultErrorPage from "next/error";
import { useRouter } from "next/router";
import matter from "gray-matter";
import { marked } from "marked";
import styles from "../../../../styles/blog/Chapter.module.css";
import { capitalise } from "../../../../components/blog/Capitalise";
import BlogPostBottom from "../../../../components/blog/BlogPostBottom";
export default function Chapter({ book, chapter, frontmatter, content }) {
// Destructuring
const { description …Run Code Online (Sandbox Code Playgroud) dynamic-routing ×10
next.js ×6
reactjs ×4
javascript ×2
nuxt.js ×2
deployment ×1
lazy-loading ×1
next-router ×1
react-router ×1
routes ×1
subdomain ×1
vercel ×1
vue-router ×1
vue.js ×1