【问题标题】:Need Help for Child Routes rendering. Parent route works fine, but child routes fall to 404需要儿童路线渲染的帮助。父路由工作正常,但子路由下降到 404
【发布时间】:2020-06-26 13:13:11
【问题描述】:

我正在使用 JSON 数据开发一个静态网站。我替换了 react-static 默认示例中的帖子数据,它工作正常。

问题:当我在另一个 JSON 中添加带有一堆消息的另一个路由 /news 时,父路由 /news 工作正常,但子路由,例如 /news/1/ 或 @ 987654324@ 全部进入 404 页。

在浏览器控制台中,我得到了错误 GET http://localhost:3000/__react-static__/routeInfo/news/1 404 (Not Found)

我不认为这些是动态路由,因为我可以在安装 react 应用程序之前获取数据。 我应该怎么做才能解决这个问题?

在我的 static.config.js 中

{
  path: '/news',
  getData: async () =>  ({
    messages,
  }),
  children: messages.map(message => ({
    path: `/news/${message.ID}`,
    template: 'src/containers/Message',
    getData: () => ({
      message,
    }),
  })),
}

我在 /src/containers 中有一个 Message.js

import React from "react";
import { useRouteData } from "react-static";

export default () => {
  const { message } = useRouteData()

  return (
       <div>
          This is a {message.Title} page!
        </div>
    )
};

工作的news.js 是

import React from 'react'
import { useRouteData } from 'react-static'
import { Link } from 'components/Router'

export default function Blog() {
  const { messages } = useRouteData()
  return (
    <div>
      <h1>It's news.</h1>
      <div>
        <a href="#bottom" id="top">
          Scroll to bottom!
        </a>
      </div>
      <br />
      All Posts:
      <ul>
        {messages.map(message => (
          <li key={message.ID}>
            <Link to={`/news/{message.ID}/`}>{message.Title}</Link>
          </li>
        ))}
      </ul>
      <a href="#top" id="bottom">
        Scroll to top!
      </a>
    </div>
  )
}

【问题讨论】:

  • useRouteData 需要像函数一样调用吗? useRouteData()。这只是复制/粘贴错字吗?
  • 抱歉,打错了。它应该是 useRouteData()。我确认js文件中没有这个错字。
  • 我不在电脑前,但如果它是'/news' 的孩子,孩子的路径可能只是/${message.ID}?
  • 并非如此,该消息是news 的子路由。作为示例,那里列出了父路由。而且我在浏览器控制台中看到的路由层次是对的。
  • 所以如果你把链接改成&lt;Link to={'/news/news/' + message.ID}&gt; {message.Title} &lt;/Link&gt;你还是会得到404?

标签: javascript reactjs react-static


【解决方案1】:

请试试这个:

const works = filterLanguage(JSON.parse(JSON.stringify(works)), lang)
...
{
   path: `/${lang}/works`,
   getProps: () => ({
      works,
   }),
   children: works.works.map(work => ({
       path: `/${work.slug}`,
       getProps: () => ({
           works,
           work: filterLanguage(Object.assign({}, {labels: works.labels}, work), lang),
       }),
   }))
},


const Work = getRouteProps(({ work }) => (
  <div>This is a work! {work}</div>
))

const Works = getRouteProps(({ works }) => (
  <div>
    <div>My works! {works}</div>
    <Route path="/works/:workID" component={Work} />
  </div>
))

如果您需要消息页面中的 message.ID 值。消息对象包含 ID 字段。

我认为路径:/news/${message.ID} 是动态路由。 也许您需要 url 包含新闻 ID。 你可以在你的链接标签中使用/news/show?id=${message.ID}。

【讨论】:

  • 我试过了。但是,它仍然不适用于/news 下的静态子路由/show。我在这里更新了news.js 文件以供进一步参考。
  • 我看到了一些文章。您需要阅读以下内容:github.com/react-static/react-static/issues/308
  • 我觉得这个问题和你的问题一样
  • 感谢 Khayankhyarvaa!我检查了该问题并尝试了解决方案,但它不起作用。我的情况似乎与那个问题不一样。我的父路由/news 一直运行良好,这意味着我得到了正确的数据messages。但是,子路由,模板Message.js无法加载,掉到404页面,即使我把全静态内容放进去。
猜你喜欢
  • 1970-01-01
  • 2021-05-10
  • 2017-05-02
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 2020-09-15
相关资源
最近更新 更多