Javascript React/NextJS:动态路由:TypeError:无法读取属性';查询';空值-->;警告:不希望服务器HTML包含<;部门>;在<;部门>;
我有一个NextJS应用程序,我刚刚在上面做了两件事。1) 我已升级到最新版本的NextJS(9.0.1),2)我已将文件(package.json、pages/、components/等)从项目根目录复制到项目根目录中的新src/app/子目录 不使用动态路由的页面可以很好地加载,但是当我需要从Next使用router对象时会出现问题。我的原始代码(在上述两件事之前运行良好): 这给了我一个错误:Javascript React/NextJS:动态路由:TypeError:无法读取属性';查询';空值-->;警告:不希望服务器HTML包含<;部门>;在<;部门>;,javascript,reactjs,typescript,next.js,server-side-rendering,Javascript,Reactjs,Typescript,Next.js,Server Side Rendering,我有一个NextJS应用程序,我刚刚在上面做了两件事。1) 我已升级到最新版本的NextJS(9.0.1),2)我已将文件(package.json、pages/、components/等)从项目根目录复制到项目根目录中的新src/app/子目录 不使用动态路由的页面可以很好地加载,但是当我需要从Next使用router对象时会出现问题。我的原始代码(在上述两件事之前运行良好): 这给了我一个错误:TypeError:cannotreadproperty'query'为null 如果我用try/
TypeError:cannotreadproperty'query'为null
如果我用try/catch来包装它:
let userObj = mockConsts.users[0];
try {
const router = useRouter();
userObj = mockConsts.users.filter(
user => user.username === router.query.username
)[0];
console.log("QUERY", router.query);
} catch (e) {
console.log("ERR", e);
}
客户端和服务器返回两个不同的错误。服务器仍然返回上述错误(TypeError:cannotreadproperty'query'为null
)
客户端返回(通过console.log):
路由器记录两次:
ROUTER
Object { pathname: "/user/[username]", route: "/user/[username]", query: {}, asPath: "/user/[username]", components: {…}, events: {…}, push: field(), replace: field(), reload: field(), back: field()
, … }
[username].tsx:23
ROUTER
Object { pathname: "/user/[username]", route: "/user/[username]", query: {…}, asPath: "/user/dog", components: {…}, events: {…}, push: field(), replace: field(), reload: field(), back: field(), … }
[username].tsx:23
如您所见,query
属性现在有了值,而asPath
属性则有所不同
QUERY Object { } [username].tsx:16
Warning: Did not expect server HTML to contain a <div> in <div>. index.js:1
QUERY Object { username: "dog" } [username].tsx:16
try {
router = useRouter();
console.log("ROUTER", router);
userObj = mockConsts.users.filter(
user => user.username === router!.query.username
)[0];
} catch (e) {
console.log("ERR", e);
}
ROUTER
Object { pathname: "/user/[username]", route: "/user/[username]", query: {}, asPath: "/user/[username]", components: {…}, events: {…}, push: field(), replace: field(), reload: field(), back: field()
, … }
[username].tsx:23
ROUTER
Object { pathname: "/user/[username]", route: "/user/[username]", query: {…}, asPath: "/user/dog", components: {…}, events: {…}, push: field(), replace: field(), reload: field(), back: field(), … }
[username].tsx:23