【问题标题】:React router changes the url but not reload the componentReact 路由器更改 url 但不重新加载组件
【发布时间】:2022-01-10 02:46:06
【问题描述】:

当我调用 move 到项目编辑器功能时,一切正常,历史将我传递到正确的组件,但是当我调用 move 以添加删除用户功能或移动到算法结果功能时,url 确实发生了变化,但组件没有加载并且我与以前保持在同一个组件中并且没有收到任何错误。 我也尝试在道具中传递历史,但没有帮助。

函数如下:

function moveToProjectsEditors(){
        props.history.push("/editorsTabs",{umlEditorId:props.umlEditor,sqlEditorId:props.sqlEditor,nfrEditorId:props.nfrEditor,ahpEditorId:props.ahpEditor})
    }

    function moveToAddRemoveUsers(){
        props.history.push("/manageUsers",{projectId:props.projectId})
    }

    function moveToResults(){
        props.history.push("/algorithmResults",{projectId:props.projectId})
    }

路线

<Route path={"/algorithmResults/:projectId?"}>
                <AlgorithmResult/>
            </Route>

            <Route path={"/manageUsers/:projectId?"}>
                <ManageProjectUsers/>
            </Route>

<Route path={"/editorsTabs/:umlEditorId?/:sqlEditorId?/:nfrEditorId?/:ahpEditorId?"} >
                <EditorsTabs />
            </Route>

请帮帮我。

【问题讨论】:

  • 看起来你的路由和路径是假设数据作为match.params的一部分传递的,但链接是假设普通路由路径和数据通过@987654324上的路由状态传递的@。选择其中一个并保持一致。一旦您选择了其中一个并修复了代码,如果您仍有问题,请在此处使用新的相关代码、详细信息和信息更新您的问题。
  • 您能否附上一个代码示例,因为我没有完全理解您的意思。编辑器选项卡路径以当前方式工作正常,但其他路线不起作用。我还尝试按照以下用户的建议在链接中添加路径参数,但它也没有帮助。
  • 对了,我也试过把路由和路径改成完全不带参数,根本不行。

标签: reactjs react-router frontend


【解决方案1】:

那是因为您没有通过查看他们期望特定 id 的路线来正确定义路径,并且您没有在推送参数中定义它

function moveToProjectsEditors(){
        props.history.push(`/editorsTabs/${props.umlEditor}/${props.sqlEditor}/${props.nfrEditor}/${props.ahpEditor}`,{umlEditorId:props.umlEditor,sqlEditorId:props.sqlEditor,nfrEditorId:props.nfrEditor,ahpEditorId:props.ahpEditor})
    }

    function moveToAddRemoveUsers(){
        props.history.push(`/manageUsers/${props.projectId}`,{projectId:props.projectId})
    }

    function moveToResults(){
        props.history.push(`/algorithmResults/${props.projectId}`,{projectId:props.projectId})
    }

【讨论】:

  • 我尝试了您的建议,但没有成功,我仍然无法在 moveToAddRemoveUsers 和 moveToAlgoritmResults 中传递给我想要的组件
  • 你能告诉我你是如何定义路线的
  • 什么意思?我在 Route 组件下发布了我的定义方式
【解决方案2】:

似乎您的路由和路径是假设数据作为路径的一部分作为match.params 传递的,但链接是假设普通路由路径和数据通过location.state 上的路由状态传递的。选择其中一个并保持一致。

使用match.params

  • 算法结果

    <Route path={"/algorithmResults/:projectId?"}>
      <AlgorithmResult/>
    </Route>
    

    导航到包含projectId 参数的路径:

    function moveToResults(){
      props.history.push(`/algorithmResults/${props.projectId}`);
    }
    
  • 管理项目用户

    <Route path={"/manageUsers/:projectId?"}>
      <ManageProjectUsers/>
    </Route>
    

    导航到包含projectId 参数的路径:

    function moveToAddRemoveUsers(){
      props.history.push(`/manageUsers/${props.projectId}`);
    }
    
  • EditorsTabs

    <Route path={"/editorsTabs/:umlEditorId?/:sqlEditorId?/:nfrEditorId?/:ahpEditorId?"}>
      <EditorsTabs />
    </Route>
    

    导航到包含umlEditorIdsqlEditorIdnfrEditorIdahpEditorId 参数的路径。

    import { generatePath } from `react-router-dom`
    
    function moveToProjectsEditors(){
      props.history.push(generatePath(
        "/editorsTabs/:umlEditorId/:sqlEditorId/:nfrEditorId/:ahpEditorId",
        {
          umlEditorId: props.umlEditor,
          sqlEditorId: props.sqlEditor,
          nfrEditorId: props.nfrEditor,
          ahpEditorId: props.ahpEditor,
        }
      ));
    }
    

使用路由状态

路线:

<Route path="/algorithmResults" >
  <AlgorithmResult/>
</Route>
<Route path="/manageUsers" >
  <ManageProjectUsers/>
</Route>
<Route path="/editorsTabs" >
  <EditorsTabs />
</Route>

链接发送路由状态:

function moveToProjectsEditors(){
  props.history.push(
    "/editorsTabs",
    {
      umlEditorId: props.umlEditor,
      sqlEditorId: props.sqlEditor,
      nfrEditorId: props.nfrEditor,
      ahpEditorId: props.ahpEditor,
    },
  );
}

function moveToAddRemoveUsers(){
  props.history.push(
    "/manageUsers",
    { projectId: props.projectId },
  );
}

function moveToResults(){
  props.history.push(
    "/algorithmResults",
    { projectId: props.projectId },
  );
}

【讨论】:

    【解决方案3】:

    问题出在历史对象上。我更新到 React Router v6 并用导航替换了历史记录,它解决了问题。

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 1970-01-01
      • 2022-08-24
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      相关资源
      最近更新 更多