react+ts 菜单权限学习三

登录页面  

根据接口userModel.query() 登录并且跳转到menu页面

menu页面是父页面 所有增加的页面是在menu这一个页面进行跳转

menu页面

1,根据userid获取到usermenuinfos里面的数据

    async componentDidMount() {
        let userinfo: any = window.localStorage.getItem("userinfo");
        if (userinfo) {
            userinfo = JSON.parse(userinfo);
            let userid = userinfo.id;//获取用户编号
            let { data: list } = await usermenuService.query({
                userid
            })
            console.log(list)
            this.setState({
                menuList: list.map((item: any) => {
                    item.com = component[item.com]
                    return item
                })
            })

        } else {
            this.props.history.push("/");
        }

    }

2,获取到数据之后 配置路由 根据获取到的数据 循环产生路由,

   2.1 解决获取到的com是一个字符串而不是一个真正的组件名称

          新建一个index.tsx并且导出  

import Menu from "./Menu"
import User from "./User"
import UserMenu from "./UserMenu"
import A1 from "./A1"
import A2 from "./A2"
import A3 from "./A3"
import A4 from "./A4"
import A5 from "./A5"
import A6 from "./A6"
export default {
    Menu: Menu,
    User: User,
    UserMenu: UserMenu,
    A1, A2, A3, A4, A5, A6
}

    引入到menu页面中

import { HashRouter as Router, Route, Switch, Redirect } from "react-router-dom"
import component from "../component/index"

  写出路由

import React, { Component } from 'react'
import usermenuService from '../model/usermenuService';
import { HashRouter as Router, Route, Switch, Redirect } from "react-router-dom"
import component from "../component/index"
export default class Menu extends Component<any, any> {
    constructor(props: any) {
        super(props);
        this.state = {
            menuList: [],//菜单的集合
        }
    }
    async componentDidMount() {
        let userinfo: any = window.localStorage.getItem("userinfo");
        if (userinfo) {
            userinfo = JSON.parse(userinfo);
            let userid = userinfo.id;//获取用户编号
            let { data: list } = await usermenuService.query({
                userid
            })
            console.log(list)
            this.setState({
                menuList: list.map((item: any) => {
                    item.com = component[item.com]
                    return item
                })
            })

        } else {
            this.props.history.push("/");
        }

    }


    render() {
        return (
            <div>

                {this.state.menuList.map((item: any, index: any) => {
                    return (<a href={"#" + item.path} key={index}>{item.name}</a>)
                })}

                <Router>
                    <Switch>
                        {this.state.menuList.map((item: any, index: any) => {
                            return (<Route path={item.path} component={item.com} key={index}></Route>)
                        })}
                    </Switch>
                </Router>
            </div>
        )
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React+TypeScript脚手架是一种用于创建React项目的工具。通过使用create-react-app脚手架,可以快速搭建一个React项目,并且使用TypeScript作为项目的开发语言。\[1\] 使用步骤如下: 1. 首先,需要安装create-react-app工具。可以通过以下命令进行安装: ``` npm i create-react-app -g ``` 或者 ``` yarn add create-react-app -g ``` 2. 然后,使用create-react-app命令来创建一个React+TypeScript项目。命令的格式如下: ``` npx create-react-app <项目名> --template typescript ``` 注意,项目名不要使用中文,否则会报错。\[2\] 3. 创建完成后,可以在VSCode中打开项目。可以看到项目中已经生成了React项目的雏形,组件的后缀为.tsx,这说明成功创建了React+TypeScript项目。\[1\] 4. 在项目中,可以根据需要进行配置。通常,可以在App组件中进行配置,例如引入所需的组件、样式和路由等。\[3\] 希望以上信息对你有帮助!如果还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* *3* [react+ts搭建](https://blog.csdn.net/m0_56540662/article/details/124267829)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [React+ts搭建脚手架](https://blog.csdn.net/weixin_51612593/article/details/120249135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值