Reactjs 当Redux和Router找不到数据时,正确的重定向方法是什么?
我有一个像这样的redux状态: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,也许我需要做的就是将它安排在以后 我还
{
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" />
}
// ...
}