You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React构建生成Sitemap时API数据异步未等待问题求助

问题原因
  • GetRoutes.js里的getAllPages是异步函数,调用后不会阻塞后续代码执行,导致导出的allPages还是初始的undefined。此时sitemapBuilder.js已经开始生成sitemap,自然拿不到动态路由数据。
解决方案

1. 改造GetRoutes.js,导出异步获取路由的函数

删掉不必要的React导入,直接导出返回路由数组的异步函数:

import axios from 'axios';

export const getAllPages = async () => {
  const res = await axios.get(`url`);
  return res.data.data.map(page => `/${page?.slug}`);
};

2. 修改sitemapBuilder.js,等待异步数据返回后再生成sitemap

把生成逻辑包裹在异步函数中,确保拿到动态路由后再构建路由组件、生成sitemap:

import React from 'react';
import { Switch, Route } from 'react-router-dom';
import Generator from 'react-router-sitemap-generator';
import { getAllPages } from './GetRoutes';

const generateSitemap = async () => {
  const allPages = await getAllPages();
  console.log('=>', allPages); // 现在能获取到正确的动态路由数据

  const AllRoutes = () => {
    return (
      <Switch>
        <Route path="/" />
        <Route path="/about" />
        <Route path="/contact" />
        <Route path="/blog" />
        {allPages.map(page => (
          <Route key={page} path={page} />
        ))}
      </Switch>
    )
  };

  const generator = new Generator('url', AllRoutes(), {
    lastmod: new Date().toISOString().slice(0, 10),
    changefreq: 'monthly',
    priority: 0.8,
  });

  generator.save('public/sitemap.xml');
};

generateSitemap();

3. 调整package.json脚本,确保执行顺序

修改build:staging脚本,用&&保证sitemap生成完成后再执行构建:

"scripts": {
  "start": "react-scripts start",
  "build": "react-scripts build",
  "build:staging": "env-cmd -f ./.env.staging npm run sitemap && react-scripts build",
  "sitemap": "babel-node ./src/utils/sitemapBuilder.js"
},
方案说明
  • await getAllPages()会等待API请求完成,拿到动态路由数据后再继续执行sitemap生成逻辑,解决了异步时序问题。
  • 脚本中的&&确保只有sitemap生成完成,才会启动构建流程,满足“构建前生成包含动态路由的sitemap”的需求。

内容的提问来源于stack exchange,提问作者behi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:35:28