如果match.params与DB |中的ID不匹配,则重定向反应路由器V4

时间:2017-10-09 21:04:29

标签: javascript reactjs react-router

我正在尝试重定向到我的主路由,如果我的数据库中没有匹配locks的锁定ID。我从Redux州获得const lockId = this.props.match.params.lockId const locks = this.props.locks || [] const lock = locks.find(lock => lock._id === lockId) if(!lock) { this.props.history.push('/') }

此:

address

工作正常,因为我可以看到我的网址正在发生变化,但我仍然尖叫着它无法找到return ( <div> <MainNavbar /> <Grid> <Row className="show-grid"> <Col md={12}> <h1 className="text-center">{lock.address.street}</h1>

componentWillReceiveProps

我理解为什么因为没有具有该ID的锁定,但这就是我想将用户重定向到主屏幕的原因。我应该使用其他类型的React生命周期方法,例如componentDidMount() { if (!this.props.lock) { console.log("redirecting..") this.props.history.push('/') } } 吗?我很沮丧嘿嘿

编辑:

Georgy在评论中回答。 你的意思是这样的吗?

const lockId = this.props.match.params.itemId
const locks = this.props.locks || []
const lock = locks.find(lock => lock._id === lockId)
if(!lock) {
  return null
}

...

{{1}}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我发现这有效:

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

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