使用react-redux实现根据地址栏选择导航及页面展示

使用react-redux实现根据地址栏选择导航及页面展示

废话不多,直接上货

MyMenu

class MyMenu extends React.Component {

  state={
    menu:'1'
  }
  handleClick = (e) => {
   // console.log('click ', e.key);
    this.setState({menu:e.key})
  }
componentWillMount() {
// if(sessionStorage.getItem('userid')==null||sessionStorage.getItem('userid')==undefined){
//   this.context.router.push("/");
// }

if(this.props.menuandcrumb) {
  this.setState({
    menu: this.props.menuandcrumb.menu,
  });
}else{
  this.setState({
    menu: "1",
  });

}

if(this.props.login&&(!this.props.login.roleid)){
  this.context.router.push('/login' );
   }
 }

  componentWillReceiveProps(nextProps) {
    if(nextProps.menuandcrumb)
      this.setState({
        menu: nextProps.menuandcrumb.menu,
    });
  }


  render() {
   // console.log(this.props.login.roleid )
    return (
  <div className={siderstyle.menu} >
   <Menu
      onClick={this.handleClick}
      style={{ width: 256 }}
      defaultSelectedKeys={[this.state.menu]}
      selectedKeys={[this.state.menu]}
      mode="inline"
    >
      <MenuItemGroup key="key1" title={<span className={siderstyle.title}><img src={img1}/>组织架构</span>}>
        <Menu.Item key="1" className={siderstyle.menuitem}><Link to="/user"/>用户管理</Menu.Item>
           <Menu.Item key="2" className={siderstyle.menuitem}><Link to="/role"/>角色管理</Menu.Item>
      </MenuItemGroup>
                <MenuItemGroup key="key2" title={<span className={siderstyle.title}><img src={img1}/>系统关系</span>}>
        <Menu.Item key="3" className={siderstyle.menuitem}><Link to="/owner"/>个人中心</Menu.Item>
           <Menu.Item key="4" className={siderstyle.menuitem}><Link to="/setting"/>系统设置</Menu.Item>
      </MenuItemGroup>
    </Menu>
  </div>
    );
  }
}

MMenu.contextTypes={
  router: React.PropTypes.object.isRequired
}


function mapStateToProps({ menuandcrumb,login}) {
  return {menuandcrumb,login};
}

export default connect(mapStateToProps)( MMenu);

menumodel

export default {
  namespace: 'menumodel',
  state: {
    menu:"1",
  },
  subscriptions: {
    setup({ dispatch, history }) {
      history.listen(({ pathname }) => {

    let menu="1";
    if(pathname.startsWith('/user')) {
     menu="1";
    }else if(pathname.startsWith('/role')) {
       menu="2";
   }else if(pathname.startsWith('/owner')) {
      menu="3";
    }else if(pathname.startsWith('/setting')) {
      menu="4";
    }else {
      menu="1";
    }
    console.log(pathname)
    console.log(menu)
    console.log(crumb)
    dispatch({
      type: 'change',
      payload: {
        menu:menu,
        crumb:crumb
      }
    });
  })
},
  },
  reducers: {
    change(state, { payload }) {
      return { ...state,...payload };
    },
  },
};

声明

以上内容均来源于实用中的网络和官方查找,若有批漏或侵权请告知。

忘掉失败,不过要牢记失败中的教训。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟天特斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值