javascript - ReactJS - 在带有 React 路由器的 URL 中使用 slug 而不是 Id

标签 javascript reactjs react-router

简而言之:我想在 URL 中显示 slug 而不是 Id,最好的方法是什么?

到目前为止,在我的 app.js 组件中,我以这种方式使用 React-router:

 <Router history={browserHistory}>
    <Route path="/" component={Main}>
      <IndexRoute component={Home}></IndexRoute>
        <Route path="/profile/:slug" component={Split}></Route>
    </Route>

  </Router>

然后在我的配置文件组件中,我使用链接通过 slug 转到该特定配置文件:

<Link to={'/profile/' + username.slug}>{username}</Link>

我在考虑在我的 profile reducer 或其他东西中将它们组合在一起?

任何提示都会非常有帮助!

最佳答案

我发现执行此操作的最佳方法是在您的状态中有两个对象,一个是由用户 ID 键入的用户,另一个是 slug-id 查找,由 slug 键入。假设您的用户看起来像这样:

{
    _id: 1234
    username: 'Mary Poppins',
    slug: 'mary-poppins',
    likes: [ 'umbrellas' ]
}

那么你的状态会是这样的:

{
    users: {
        1234: {
            username: 'Mary Poppins',
            slug: 'mary-poppins',
            likes: ['umbrellas']
        }
    },
    slugs: {
        'mary-poppins': 1234
    }
}

现在,当您渲染 Link 组件时,您使用:

<Link to=`/profile/${user.slug}`>{user.username}</Link>

要在有 slug 时选择用户,您将有一个选择器,例如:

const user = ( slug ) => ( state ) => state.users[state.slugs[slug]];

关于javascript - ReactJS - 在带有 React 路由器的 URL 中使用 slug 而不是 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42659611/

相关文章:

javascript - 需要帮助,JavaScript 和 HTML 未显示在资源管理器上

javascript - 错误 : Unable to resolve module `@react-native-community/toolbar-android`

javascript - React-router:一旦安装了路由上的组件,即使路由发生变化,也永远不会卸载

javascript - 是否有可能通过 0 度转换 :rotate(Xdeg)? 获得平滑的 CSS 过渡

JavaScript Map.get(variableName) 返回未定义

routes - 如何使用React Router的重定向功能?

javascript - Angular Controller 范围/变量未出现

javascript - 同时播放多个声音

javascript - 通过函数传递 elementID,然后返回变量并在其他地方使用。可能的?

reactjs - Office UI Fabric React TagPicker 新项目