Javascript 如果match.params不';不匹配DB | React路由器V4中的ID

Javascript 如果match.params不';不匹配DB | React路由器V4中的ID,javascript,reactjs,react-router,Javascript,Reactjs,React Router,如果数据库中没有与锁的id匹配的lockId,我将尝试重定向到我的主路径。我正在从我的Redux状态获得锁 这: 工作正常,因为我可以看到我的url正在更改,但react仍然对我尖叫,因为它找不到地址: return ( <div> <MainNavbar /> <Grid> <Row className="show-grid"> <Col md={12}> <h

如果数据库中没有与锁的id匹配的
lockId
,我将尝试重定向到我的主路径。我正在从我的Redux状态获得

这:

工作正常,因为我可以看到我的url正在更改,但react仍然对我尖叫,因为它找不到
地址

return (
  <div>
    <MainNavbar />
    <Grid>
      <Row className="show-grid">
        <Col md={12}>
          <h1 className="text-center">{lock.address.street}</h1>


我认为你应该使用componentDidMount,它发生在渲染之前。在render方法中,如果锁不存在,则应返回null

我发现这是可行的:

if(!lock) {
  window.location.href = '/'
}

但是感觉这不是React开发的最佳实践。

是的,但似乎您没有
这个.props.lock
,因为您得到
lock
作为
locks.find(lock=>lock.\u id==lock id)
componentDidMount() {
  if (!this.props.lock) {
    console.log("redirecting..")
    this.props.history.push('/')
  }
}
const lockId = this.props.match.params.itemId
const locks = this.props.locks || []
const lock = locks.find(lock => lock._id === lockId)
if(!lock) {
  return null
}
if(!lock) {
  window.location.href = '/'
}