当前位置: 首页 > 知识库问答 >
问题:

React router push仅更改url

淳于健
2023-03-14

我正在使用react路由器,我想通过单击一行重定向到详细页面。

这是我的组件

<Table
  model={TypeModel}
  source={this.props.types}
  selectable={false}
  onRowClick={index => this.context.router.push(`/dashboard/types/${this.props.types[index].id}`)}
/>

单击url时,url将更改,但我的页面保持不变。我是这样定义路线的

{
  path: '/dashboard',
  component: requireAuthentication(DashboardLayout),
  indexRoute: Dashboard,
  childRoutes: [{
    path: 'types',
    indexRoute: TypeListRoute(store),
    childRoutes: [
      TypeDetailsRoute(store) // The path of this route is :id
    ]
  }]
}

我不知道为什么,这是工作在其他地方的应用程序。我也检查并尝试了这个线程

  • Browser History push无法导航到新页面

我错过什么了吗?

我的路由器看起来像

const routes = createRoutes(store)
<Router history={browserHistory} children={routes} />

使用以下createRoutes方法

createRoutes = store => ({
  childRoutes: [{
    path: '/',
    component: HomeLayout,
    indexRoute: Home,
    childRoutes: [
      LoginRoute(store),
      LogoutRoute(store),
      SignupRoute(store)
    ]
  }, {
    path: '/dashboard',
    component: requireAuthentication(DashboardLayout),
    indexRoute: Dashboard,
    childRoutes: [
      DeviceRoute(store),
      UserRoute(store),
      {
        path: 'types',
        indexRoute: TypeListRoute(store),
        childRoutes: [
          TypeDetailsRoute(store)
        ]
      }
    ]
  }]
})

仪表板布局是一个react组件,它将子级封装到一些组件中

export class DashboardLayout extends React.Component {
  constructor (props) {
    super(props)
    this.children = props.children
  }

  render () {
    return ( 
      <Layout theme={drawerTheme}>
        <NavDrawer pinned >...</NavDrawer>
        <Panel>
          {this.children}
        </Panel>
      </Layout>
    )
  }
}

TypeListRoute如下所示

export const TypeListRoute = store => ({
  getComponent (nextState, cb) {
    require.ensure([], (require) => {
      const Type = require('./containers/TypeContainer').default

      const reducer = require('./modules/type').default

      injectReducer(store, { key: 'type', reducer })

      cb(null, Type)
    }, 'type')
  }
})

其中TypeContainer从“react工具箱”返回连接的(到redux存储)表`

TypeDetailsRoute完全相同,但我指定了一个路径

export const TypeDetailsRoute = store => ({
  path: ':id',
  getComponent (nextState, cb) {
    require.ensure([], (require) => {
      const Type = require('./containers/TypeDetailsContainer').default

      const reducer = require('./modules/type').default

      injectReducer(store, { key: 'type', reducer })

      cb(null, Type)
    }, 'type')
  }
})

这里TypeDetailsContainer返回的东西与Table完全不同。我尝试了一个简单的h1,我仍然有错误


共有2个答案

祖麻雀
2023-03-14

我解决了!!!

createRoutes方法中,我必须通过其异步版本getChildRoutes更改rootChilRoutes

因此,createRoutes方法变成(TypeLine重新组合TypeListRoadTypeDetailRoad

export const createRoutes = store => ({
  getChildRoutes (nextState, cb) {
    cb(null, [{
      path: '/',
      component: HomeLayout,
      indexRoute: Home,
      childRoutes: [
        LoginRoute(store),
        LogoutRoute(store),
        SignupRoute(store)
      ]
    }, {
      path: '/dashboard',
      component: requireAuthentication(DashboardLayout),
      indexRoute: Dashboard,
      childRoutes: [
        DeviceRoute(store),
        UserRoute(store),
        TypeRoute(store)
      ]
    }])
  }
})
任小云
2023-03-14

您可以使用Link组件来完成此操作:

import { Link } from 'react-router'

...

<Link to={`/dashboard/types/${this.props.types[index].id}`}>Dashboard page</Link>
 类似资料:
  • 问题内容: 我在SQL Server中运行合并。在我的更新中,我只想更新值已更改的行。版本行在每次更新时都会递增。下面是一个示例: 现在,如果我只想更新行,从而增加版本,则仅在名称更改的情况下。 问题答案: 可以有。另外,无需更新。 如果Last_Name或First_Name可为空,则例如在比较trg.Last_Name <> src.Last_Name时,需要注意值。

  • 问题内容: 内容: 我想使用jenkins定期仅处理SVN中已更改的文件,并将处理的输出提交回SVN。 原因: 我们正在将二进制文件提交到SVN中(我们正在使用Oracle Forms,并且正在提交fmb- Files)。我创建了一个脚本,将fmb导出到xml(使用Oracle的原始Fmb2XML工具),然后我将XML转换为我们也想提交的纯源。这使我们可以进行摸索,查看更改等。 问题: 目前,我只

  • 问题内容: 可以说我的模块结构如下 现在要给客户端发消息,我需要构建所有模块,因为我正在加载上述所有模块的罐子,以最终发动客户端 并且所有jar都组装在模块部署中。 我的问题是,例如,如果我更改了服务中的任何内容,那么从运行构建时是否有办法可以识别出它只能构建,因此可以构建并将其部署到deploy文件夹中? 问题答案: 如果您正在使用SVN和* nix,请从根模块

  • 我一直在尝试改装,我真的很简单。 然而,我有一个奥化的担忧。我正在为我的后端使用Parse,它有一个纯restapi。 当我想要更新一个对象时,我使用一个,并只在

  • 我的WordPress博客中有几个类别。所有帖子都可以通过domain.tld/post-title获得。但现在我需要不同的网址为某些主题。 示例: blog>domain.tld/post-title 类别1>域.tld/category-1/post-title 类别2>域.tld/category-2/post-title 类别3>域.tld/post-title 我不想使用插件,而是通过c

  • 问题内容: 我有一个,并且有一个侦听器连接到它。 现在,即使用户只是重新选择了先前选择的值,每次用户从下拉菜单中“选择”某项时,事件都会触发。 如果组合框的选定值与选定前的值不同,有什么方法可以仅触发事件? 我想我可以将组合框的值存储在不同的字段中,并在每次事件触发时将其进行比较,这似乎有点过头了。我有20个左右这样的组合框。我宁愿不要再有20个变量来存储值,这样事件就不会触发。 一定有更好的方法