首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React在页面加载后添加路由

React在页面加载后添加路由
EN

Stack Overflow用户
提问于 2021-11-22 17:22:43
回答 1查看 28关注 0票数 1

我有一个带有名称列表(可以更改)的API,然后我想从该列表创建路由,但我一直收到路由未找到错误。但是,当手动添加名称的路由时,它可以工作。如何在页面加载后添加路由以使其正常工作以下是我的代码

代码语言:javascript
复制
function App() {
    let json =[]
    fetch(`${baseURL}/applications/`).then(response =>{return response.json();}).then(data =>{json=data})
    console.log("json =", json)
    return (
      <Router>
        <div className="App">
          <header className="App-header">
              <Routes>
                  <Route path="/" exact element={<ApplicationsList/>}/>
                  <Route path={"/1080p-Lock"} exact element={<ApplicationPage name={"1080p-Lock"}/>}/>
                  {json.map(item => {ReactDOM.render(<Route path={"/" + item} exact element={<ApplicationPage name={item}/>}/>)})}
              </Routes>
          </header>
        </div>
      </Router>
    );
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-22 18:21:01

问题

React呈现函数是一个同步的纯函数,它不能等待异步逻辑完成。在每个渲染周期中,json值将重置为空数组。

路由映射只需要返回需要呈现的Route组件,这里使用ReactDOM并不是很有效。

解决方案

使用组件状态存储获取的数据,并使用挂载useEffect挂钩发出获取请求。

代码语言:javascript
复制
function App() {
  const [routes, setRoutes] = useState([]);

  useEffect(() => {
    fetch(`${baseURL}/applications/`)
      .then(response => {
        return response.json();
      })
      .then(data => {
        setRoutes(data);
      })
      .catch(error => {
        // handle any rejected Promises, etc...
      });
  }, []);

  return (
    <Router>
      <div className="App">
        <header className="App-header">
          <Routes>
            <Route path="/" element={<ApplicationsList/>}/>
            <Route path={"/1080p-Lock"} element={<ApplicationPage name={"1080p-Lock"}/>}/>
            {routes.map(item => (
              <Route path={"/" + item} element={<ApplicationPage name={item}/>}/>
            ))}
          </Routes>
        </header>
      </div>
    </Router>
  );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70069921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档