Reactjs React Router v4重定向到当前页面,组件消失

Reactjs React Router v4重定向到当前页面,组件消失,reactjs,redirect,react-router,material-ui,Reactjs,Redirect,React Router,Material Ui,我正在使用react路由器重定向到其他页面。但是当我重定向到当前页面时,处理重定向的组件消失了 这个问题出现在另一个页面中,我不想比较目标路径和当前路径来决定是重定向还是保留。 这让人困惑,我不知道为什么LoggedMenu会消失 有人能帮我吗 import React, {Component} from 'react'; import PropTypes from 'prop-types'; import { Redirect } from 'react-router'; import Fon

我正在使用react路由器重定向到其他页面。但是当我重定向到当前页面时,处理重定向的组件消失了

这个问题出现在另一个页面中,我不想比较目标路径和当前路径来决定是重定向还是保留。 这让人困惑,我不知道为什么LoggedMenu会消失

有人能帮我吗

import React, {Component} from 'react';
import PropTypes from 'prop-types';
import { Redirect } from 'react-router';
import FontIcon from 'material-ui/FontIcon';
import Divider from 'material-ui/Divider';
import { List, ListItem, Avatar, Badge } from 'material-ui';
import { IconButton, IconMenu, MenuItem, FlatButton } from 'material-ui';

class LoggedMenu extends Component {
  constructor(props) {
    super(props);
    this.state = {
      redirectTo: ''
    };
    this.redirectTo = this.redirectTo.bind(this);
  }

  redirectTo(pageName) {
    this.setState({
      redirect: pageName
    })
  }

  render() {
    switch (this.state.redirect) {
      case 'home':
        return <Redirect push to="/" />;
      case 'profile':
        return <Redirect push to="/profile" />;
      case 'settings':
        return <Redirect push to="/settings" />;
      case 'help':
        return <Redirect push to="/help" />;
      default:
        return (
          <IconMenu
            iconButtonElement={
              <IconButton style={{padding: 0}}>
                <MoreVertIcon color={white} />
              </IconButton>
            }
            anchorOrigin={{horizontal: 'right', vertical: 'top'}}
            targetOrigin={{horizontal: 'right', vertical: 'top'}}
          >
            <MenuItem
              onClick={()=>{
                this.redirectTo('profile');
              }}
              primaryText="Profile"
            />
            <MenuItem
              onClick={()=>{
                this.redirectTo('settings');
              }}
              primaryText="Settings"
            />
            <MenuItem
              onClick={()=>{
                this.redirectTo('help');
              }}
              primaryText="Help"
            />
          </IconMenu>
        )
    }
  }
}
import React,{Component}来自'React';
从“道具类型”导入道具类型;
从“react router”导入{Redirect};
从“材质ui/FontIcon”导入FontIcon;
从“物料界面/分割器”导入分割器;
从“材料ui”导入{List,ListItem,Avatar,Badge};
从“材质ui”导入{IconButton、IconMenu、MenuItem、FlatButton};
类LoggedMenu扩展组件{
建造师(道具){
超级(道具);
此.state={
重定向到:“”
};
this.redirectTo=this.redirectTo.bind(this);
}
重定向到(页面名){
这是我的国家({
重定向:页面名
})
}
render(){
开关(this.state.redirect){
“家”案例:
返回;
个案‘简介’:
返回;
案例“设置”:
返回;
案例“帮助”:
返回;
违约:
返回(
{
此。重定向到(“配置文件”);
}}
primaryText=“Profile”
/>
{
此。重定向到(“设置”);
}}
primaryText=“设置”
/>
{
这个。重定向到(“帮助”);
}}
primaryText=“帮助”
/>
)
}
}
}

ReactRouter v4内部使用shouldComponentUpdate…因此需要更改道具以重新发布组件。 尝试用withRouter包装您的组件,或者将更新的道具发送到组件,否则它将不会更新

export default withRouter(connect(mapStateToProps)(LoggedMenu))

ReactRouter v4内部使用shouldComponentUpdate…因此需要在道具中进行更改以重新发布组件。完美响应。解决了我的问题。使用withRouter包装redux组件并插入历史记录,以便我可以导航。使用的解决方案对我来说效果不好,因为我正在失去redux状态。谢谢