美文网首页
bunny笔记|React学习-AntDesign组件库(UI)

bunny笔记|React学习-AntDesign组件库(UI)

作者: 一只小小小bunny | 来源:发表于2022-04-12 14:00 被阅读0次
AntDesign

官网
AntDGithub

作用:
提供丰富、高质量的组件(开箱即用,使用typescript构建,提供完整的类型定义文件,全链路开发和设计工具体系)
react+antDesign可以理解为 React定制的UI组件库

使用:
安装 npm install antd --save yarn add antd
引入样式文件
引入UI组件

按需加载
(1)原因
虽然组件成功运行起来了,但实际上加载了全部的antd 组件的样式,会影响前端的性能,借助react-app-rewired进行自定义配置
(2)方法
1)引react-app-rewired 并修改package.json 里的启动配置 yarn add react-app-rewired customize-cra
2)配置package.json文件步骤
3)在项目根目录创建一个config-overrides.js用于修改默认配置
4)安装用于按需加载组件代码和样式的babel插件yan add babel-plugin-import

React-Router

概念:
1)什么是路由?我想去应用的某个页面,通过路由就可以帮助跳转到对应的页面
V4.x版本中:
react-router是浏览器和原生应用的通用部分,
react-router被分为几部分
react-router-dom是用于浏览器的
react-router-native是用于原生应用的

React router v4.x特性
1)路由不再是集中在一个文件,它成了应用布局、UI的一部分;
2)浏览器用的router在react-router-dom里;所以,浏览器里使用的时候只需要importreact-router-dom就可以:
3)增加了BrowerRouter和HashRouter
4)v4的路由默认不再排他,会有多个四配;而v3是默认排他的,只会有一个匹配被使用。
5)不再使用{props.children}来处理嵌套的路由

使用:
安装:我们使用react开发web应用,所以只需要安装react-router-dom yarn add react-router-dom

Route组件
通过Route组件可以在需要匹配某个路径的时候绘制一个组件日 <Route exact path="/" component={MainPage) />
常用属性
path属性,字符串类型,它的值就是用来匹配url的
component属性,它的值是一个组件。在path匹配成功之后会绘制这个组件
exact属性,用来指明这个路由是不是排他的匹配
strict属性,用来指明路径只匹配以斜线结尾的路径
....

Link组件
1)Link是reactrouterv4特有的一个组件,是用来代替上一版的anchorlink:
2)使用Link可以在React应用的不同页面之间跳转;
3)与anchorlink会重新加载整个页面不同,Link只会重新加载页面里和当前url可以匹配的部分

BorwserRouter和HashRouter
BrowserRouter:
对Router接口的实现,使得页面和浏览器的history保持一致;如:window.location
HashRouter:
也是对Router接口的实现,只是使用的是ur的hash部分,比如:window.location.hash
区别:
1)如果是非静态站点,要外理各种不同的ur,则需要使用BrowserRouter
2)如果是静态站点,只需要匹配静态url,则使用HashRouter即可

动态路由配置
<Route path="/hot/:hid"component={Hot) />
2)对应动态路由加载的组件里获取传值。 thispropsmatch.params
3)跳转传值

路由重定向
1)引入 import {Redirect) from "react-router-dom"
2)定义标记(flag) this.state ={ loginFlag: false}
3)render中判断,决定是否跳转 if(this.state.loginFlag){return <Redirect to={{pathname:"/"}}/>
4)执行JS实现跳转 改变状态

demo理解Router

结果展示:

Router.png
router2.png

1)一级路由的使用:
在React APP的src下新建一个components文件夹,新建Home.jsx、Student.jsx、User.jsx

.jsx文件内部代码的基础格式:

import React, {Component} from 'react'; 

export default class Home extends Component{
    constructor(props){
        super(props);
        this.state={}
    }
    
    render(){
        return(
        <div>首页</div>
        )
    }
}
import React, {Component} from 'react';

export default class Student extends Component{
    constructor(props){
        super(props);
        this.state = {}
    }

    render() {
        return (
            <div className="student">
                学生中心
            </div>
        )
    }
}
import React, {Component} from 'react';
import {Route, Link} from "react-router-dom";

export default class User extends Component{
    constructor(props){
        super(props);
        this.state = {}
    }

    render() {
        console.log(this.props.routes);
        return (
            <div>
            个人中心
            </div>
        )
    }
}

2)然后再到app.js中引入

import React, {Component} from 'react';
import './assets/index.css'
import {BrowserRouter as Router, Route, Link} from "react-router-dom";

import Home from './components/Home'
import Student from './components/Student'
import User from './components/User'

class App extends Component {
    render(){
        return(
        <Router>
            <div>
            <header className="title">
             //后指定Link的to对应去到的组件模块
                <Link to="/">页面主页</Link>
                <Link to="/stu">学生中心</Link>
                <Link to="/user">个人中心</Link>
            </header>
            
            //先Route path componnet引入对应组件模块(只有一个页面要exact排他)
            <Router exact path="/" component={Home}>
            <Router path="/stu/" component={Student}>
            <Router  path="/user/" component={User}>
            </div>
        <Router>
        )
    }
}

export default App;

优化路由的引入方式(推荐)

import React, {Component} from 'react';
import './assets/index.css'
import {BrowserRouter as Router, Route, Link} from "react-router-dom";

import Home from './components/Home'
import Student from './components/Student'
import User from './components/User'

let routes=[
{path="/" component=Home,exact:true},
{path="/stu" component=Student},
{path="/user" component=User}
];

class App extends Component {
    render(){
        return(
        <Router>
            <div>
            <header className="title">
                <Link to="/">页面主页</Link>
                <Link to="/stu">学生中心</Link>
                <Link to="/user">个人中心</Link>
            </header>
            
            {
                router.map((route,key)={
                    if(route.exact){
                        return <Router key={key} exact path={route.path} component={route.component}/>
                    }else{
                        return <Router key={key}  path={route.path} component={route.component}/>
                    }
                })
            }
            
            </div>
        <Router>
        )
    }
}

export default App;

3)二级路由(User.js为案例)

import React, {Component} from 'react';
import {Route, Link} from "react-router-dom";

export default class User extends Component{
    constructor(props){
        super(props);
        this.state = {}
    }

    render() {
        console.log(this.props.routes);
        return (
            <div className="user">
                <div className="content">
                    <div className="left">
                        <Link to="/user/">主面板</Link>
                        <br/>
                        <br/>
                        <Link to="/user/info">用户信息</Link>
                    </div>
                    <div className="right">
                     {/* <Route exact path={`${this.props.match.url}/` component={Main}}/>
                        <Route exact path={`${this.props.match.url}/Info` component={Info}}/> */}
                        {
                            this.props.routes.map((route, key)=>{
                                return  <Route key={key} exact path={route.path} component={route.component} />
                            })
                        }
                    </div>
                </div>
            </div>
        )
    }
}

注意:不要忘记引入 import {Route, Link} from "react-router-dom";

4)封装路由。 新建一个routes文件夹,生成index.js文件

import Home from "./../components/Home";
import Student from "./../components/Student";
import User from "./../components/User";
import Info from './../components/User/Info';
import Main from './../components/User/Main';

let routes={
    {path:"/",component:Home,exact:true},
    {path:"/stu",component:Student},
    //含二级路由
    {
    path:"/user",
    component:User,
    routes:[
    {path:"/user/",component:Main},
    {path:"/user/info",component:Info}
    ]
        
    }
}

export default routes;

在APP.js中引入,并优化App.js代码。

import React, {Component} from 'react';
import './assets/index.css'
import {BrowserRouter as Router, Route, Link} from "react-router-dom";
import routes from './routes/index';

class App extends Component {
    render() {
        return (
            <Router>
                <div>
                    <header className="title">
                        <Link to="/">页面主页</Link>
                        <Link to="/stu">学生中心</Link>
                        <Link to="/user">个人中心</Link>
                    </header>
                    {
                        routes.map((route, key)=>{
                            if(route.exact){
                                return  (
                                    <Route
                                    key={key}
                                    exact
                                    path={route.path}
                                    render={props=>(
                                        <route.component {...props}  routes={route.routes}/>
                                    )}
                                />)
                            }else {
                                return  (
                                    <Route
                                        key={key}
                                        path={route.path}
                                        render={props=>(
                                            <route.component {...props}  routes={route.routes}/>
                                        )}
                                    />)
                            }
                        })
                    }
                </div>
            </Router>
        );
    }
}

export default App;

components/User/Main.jsx

import React, {Component} from 'react';

export default class Main extends Component{
    constructor(props){
        super(props);
        this.state = {}
    }

    render() {
        return (
            <div>
               用于展示用户的主要信息
               <li>姓名</li>
               <li>联系方式</li>
            </div>
        )
    }
}

components/User/Info.jsx

import React, {Component} from 'react';

export default class Info extends Component{
    constructor(props){
        super(props);
        this.state = {}
    }

    render() {
        return (
            <div>
                <li>姓名</li>
                <li>性别</li>
                <li>年龄</li>
                <li>联系方式</li>
                <li>居住地址</li>
                <li>兴趣爱好</li>
                <li>技能证书</li>
            </div>
        )
    }
}

相关文章

网友评论

      本文标题:bunny笔记|React学习-AntDesign组件库(UI)

      本文链接:https://www.haomeiwen.com/subject/xyussrtx.html