Reactjs 当Redux和Router找不到数据时,正确的重定向方法是什么?

Reactjs 当Redux和Router找不到数据时,正确的重定向方法是什么?,reactjs,react-router,react-redux,Reactjs,React Router,React Redux,我有一个像这样的redux状态: { currentItemId: 1, items: [{id: 1, name: 'todo 1'}, ...] } 设置currentItemId时,应用程序将显示项目的详细信息 现在,在一个罕见的情况下,当currentItem被设置为不代表items数组中的项的ID时,我想重定向回 一个很好的地方可以捕捉到我们的ItemForm中的connect,在那里我可以发出重定向 问题是,它抱怨调用setState,也许我需要做的就是将它安排在以后 我还

我有一个像这样的redux状态:

{
  currentItemId: 1,
  items: [{id: 1, name: 'todo 1'}, ...]
}
设置
currentItemId
时,应用程序将显示项目的详细信息

现在,在一个罕见的情况下,当currentItem被设置为不代表items数组中的项的ID时,我想重定向回

一个很好的地方可以捕捉到我们的
ItemForm
中的
connect
,在那里我可以发出重定向

问题是,它抱怨调用
setState
,也许我需要做的就是将它安排在以后

我还想确保在找不到项目的情况下不会显示
ItemForm


在这种情况下,正确的做法是什么?

根据使用的路由方法,重定向方式略有不同。假设您使用的是react路由器dom,我只需在render或componentDidMount中执行重定向。假设您将currentItemId映射到组件的一个道具,您可以使用

在react router dom中执行重定向的另一种方法是呈现一个

render(){
如果(!this.props.currentItemId){
返回
}
// ...
}

根据所使用的路由方法,重定向方式略有不同。假设您使用的是react路由器dom,我只需在render或componentDidMount中执行重定向。假设您将currentItemId映射到组件的一个道具,您可以使用

在react router dom中执行重定向的另一种方法是呈现一个

render(){
如果(!this.props.currentItemId){
返回
}
// ...
}

谢谢,看起来
componentWillMount
更好,因为它是在渲染之前触发的(如果没有完整的数据,我不想也不能渲染)。似乎删除OneNet也意味着使用生命周期方法。这个HOC看起来是正确的解决方案,因为我必须1)删除我所有的道具中需要的isRequired 2)让componentWillMount和componentWillReceiveProps都包含在一个组件中,如果数据不存在,甚至不应该真正触碰这些组件。谢谢,看起来
componentWillMount
更好,因为它是在渲染之前触发的(我不想也不能在没有完整数据的情况下渲染)。似乎删除OneNet也意味着使用生命周期方法。这个HOC看起来是正确的解决方案,因为我必须1)删除我所有的道具中需要的isRequired 2)让componentWillMount和componentWillReceiveProps都包含在一个组件中,如果数据不存在,甚至不应该真正触碰这些组件。
componentDidMount() {
    if(!this.props.currentItemId) { // Or whatever value you want to check for
        this.props.history.push('/redirectpageurl');
    }
}
render() {
    if(!this.props.currentItemId) {
        return <Redirect to="/redirectpageurl" />
    }
    // ...
}