29 条回复
  • LiOH · 真仙
    LiOH · 真仙 #1

    焦急的等待着更新

  • lolotang · 真仙
    lolotang · 真仙 #2

    这个课程说明时候开始啊?

  • Thever · 金仙后期

    我也想问啊,老师啥时候更新啊

  • netNowork · 金仙巅峰

    焦急的等待着更新,+1 希望老师 主要先更新这个,进行学习.

  • 想卖咖啡的程序员 · 真仙

    尽快更这个

  • Max · 金仙后期
    Max · 金仙后期 #6

    Ant Design Pro4超级多问题,要是我就会等他修复半年 稳定了再上生产环境

  • Max · 金仙后期
    Max · 金仙后期 #7

    还有登录页的问题,看 issues 官方的回答

  • 想卖咖啡的程序员 · 真仙

    给个地址我看下,这个问题的

  • Max · 金仙后期
  • 黄金雨 · 金仙后期

    求更

  • 想卖咖啡的程序员 · 真仙

    过几天就开始更这个哈

  • lolotang · 真仙
    lolotang · 真仙 #12

    期待

  • 黄金雨 · 金仙后期

    老师,能否讲讲如何做自定义组件呢?我想做一个图片验证码组件,用于登录页面。谢谢。

  • Max · 金仙后期
    Max · 金仙后期 #14

    简单,一个 Input 框,一个 Img 标签就可以了,Img 标签每次点击重新请求图片验证码就可以了。
    我是用原生 Captcha 组件改改的

                <Captcha
                  name="captcha"
                  captchaPath={captchaPath}
                  onGetCaptcha={this.onGetCaptcha}
                  placeholder={formatMessage({ id: 'form.verification-code.placeholder' })}
                  rules={[
                    {
                      required: true,
                      message: formatMessage({ id: 'validation.verification-code.required' }),
                    },
                  ]}
                  onPressEnter={e => {
                    e.preventDefault();
                    this.loginForm.validateFields(this.handleSubmit);
                  }}
                />
    
      onGetCaptcha = () => {
        const uuid = generateUUID()
        this.setState({
          uuid,
          captchaPath: `/api/captcha.jpg?uuid=${uuid}`
        })
      }
    
  • 黄金雨 · 金仙后期

    感谢了,兄弟

  • lolotang · 真仙
    lolotang · 真仙 #16


    接入后端的api,登录成功后转发到首页拉取用户信息时,headers没有默认带上token导致401,但再次刷新首页又可以了,不知道老师知道原因不?

  • 想卖咖啡的程序员 · 真仙

    把 token 存 cookies 吧

  • lolotang · 真仙
    lolotang · 真仙 #18


    但改成跳转的方式就可以,感觉是routerRedux.replace的问题

  • lolotang · 真仙
    lolotang · 真仙 #19


    待会试试存cookie,感觉也会是同样的问题,token应该是成功存了的.
    登录成功后,用routerRedux.replace去转发,这段的headers没有刷新authorization的值

  • lolotang · 真仙
    lolotang · 真仙 #20

    调试的结果是location.href会触发这个文件执行,这样就会把存的token重新赋值给authorization,
    但routerRedux.replace不会触发这边,所以authorization的值还是刚进登录页面的空值,难道要在routerRedux.replace转发前去触发这个文件执行吗?

  • 想卖咖啡的程序员 · 真仙

    第一套有提到存到 localstorage 结合 antd 就有这个问题的,要么换成 axios等其他工具 发送请求 或 存到 cookies 试下的,存到 localstorage 不是最佳选择

  • lolotang · 真仙
    lolotang · 真仙 #22

    没注意到,我试试cookie看行不行吧

  • 想卖咖啡的程序员 · 真仙

    嗯,你可以试试

  • lolotang · 真仙
    lolotang · 真仙 #24


    换成cookie还是一样的效果,用location.href跳就可以。。。

  • 这家伙真懒丶 · 太乙玉仙

    老师能不能说下下 Pro v4这个课大概什么时候更完

  • 想卖咖啡的程序员 · 真仙

    不好预估呀

  • 阿飞 · 金仙后期
    阿飞 · 金仙后期 #27

    请问一下,我想配置不同得环境该这么配置,比如说我有两个测试环境,一个生成环境,我要分别打包

  • liji0565 · 真仙
    liji0565 · 真仙 #28

    老师,请问如何去除全局页脚,我用视频的方法可以覆盖,但是无法去除

  • liji0565 · 真仙
    liji0565 · 真仙 #29

    老师,如何去除页脚,我用视频的方式只能覆盖,无法去除,就算将很多注释掉,页脚还是存在
    import ProLayout, { SettingDrawer,DefaultFooter} from '@ant-design/pro-layout';
    import React, { useEffect } from 'react';
    import Link from 'umi/link';
    import { connect } from 'dva';
    import { formatMessage } from 'umi-plugin-react/locale';
    import Authorized from '@/utils/Authorized';
    import RightContent from '@/components/GlobalHeader/RightContent';
    import { isAntDesignPro } from '@/utils/utils';
    import logo from '../assets/logo.svg';
    // import {DefaultFooter} from "@ant-design/pro-layout";

    /**

    • use Authorized check all menu item */

    const menuDataRender = menuList =>
    menuList.map(item => {
    const localItem = { ...item, children: item.children ? menuDataRender(item.children) : [] };
    return Authorized.check(item.authority, localItem, null);
    });

    const links = [
    {
    key: '',
    title: '',
    href: '',
    blankTarget: true,
    },
    {
    key: '',
    title: '',
    href: '',
    blankTarget: true,
    },
    ];

    const copyright = '';

    //所有footerRender 都注释掉,页脚还是存在,找不到页脚是在哪里引入的
    const footerRender = (_, defaultDom) => {
    if (!isAntDesignPro()) {
    // return defaultDom;
    return ( <>

    </>
    )
    }

    // return (
    // <>
    // {defaultDom}
    //
    //
    //
    //
    //
    // </>
    // );
    }
    const BasicLayout = props => {
    const { dispatch, children, settings } = props;
    /**

    • constructor */

    useEffect(() => {
    if (dispatch) {
    dispatch({
    type: 'user/fetchCurrent',
    });
    dispatch({
    type: 'settings/getSetting',
    });
    }
    }, []);
    /**

    • init variables */

    const handleMenuCollapse = payload => {
    if (dispatch) {
    dispatch({
    type: 'global/changeLayoutCollapsed',
    payload,
    });
    }
    };

    return (
    <>
    {
    if (menuItemProps.isUrl) {
    return defaultDom;
    }

          return <Link to={menuItemProps.path}>{defaultDom}</Link>;
        }}
        breadcrumbRender={(routers = []) => [
          {
            path: '/',
            breadcrumbName: formatMessage({
              id: 'menu.home',
              defaultMessage: 'Home',
            }),
          },
          ...routers,
        ]}
        itemRender={(route, params, routes, paths) => {
          const first = routes.indexOf(route) === 0;
          return first ? (
            <Link to={paths.join('/')}>{route.breadcrumbName}</Link>
          ) : (
            <span>{route.breadcrumbName}</span>
          );
        }}
        footerRender={footerRender}
        menuDataRender={menuDataRender}
        formatMessage={formatMessage}
        rightContentRender={rightProps => <RightContent {...rightProps} />}
        {...props}
        {...settings}
      >
        {children}
      </ProLayout>
      <SettingDrawer
        settings={settings}
        onSettingChange={config =>
          dispatch({
            type: 'settings/changeSetting',
            payload: config,
          })
        }
      />
    </>
    

    );
    };

    export default connect(({ global, settings }) => ({
    collapsed: global.collapsed,
    settings,
    }))(BasicLayout);

© 汕尾市求知科技有限公司 | 粤ICP备19038915号 | 在线学员:89

Top