欧勇 2019-02-20 12:29 采纳率: 0%
浏览 1051

在antdpro的登陆页面中是怎么给UserLayout注入children的

import Link from 'umi/link';
import { Icon } from 'antd';
import GlobalFooter from '@/components/GlobalFooter';
import SelectLang from '@/components/SelectLang';
import styles from './UserLayout.less';
import logo from '../assets/logo.svg';

const links = [
  {
    key: 'help',
    title: formatMessage({ id: 'layout.user.link.help' }),
    href: '',
  },
  {
    key: 'privacy',
    title: formatMessage({ id: 'layout.user.link.privacy' }),
    href: '',
  },
  {
    key: 'terms',
    title: formatMessage({ id: 'layout.user.link.terms' }),
    href: '',
  },
];

const copyright = (
  <Fragment>
    Copyright <Icon type="copyright" /> 2018 蚂蚁金服体验技术部出品
  </Fragment>
);

const UserLayout = ({ children }) => (
  // @TODO <DocumentTitle title={this.getPageTitle()}>
  <div className={styles.container}>
    <div className={styles.lang}>
      <SelectLang />
    </div>
    <div className={styles.content}>
      <div className={styles.top}>
        <div className={styles.header}>
          <Link to="/">
            <img alt="logo" className={styles.logo} src={logo} />
            <span className={styles.title}>Ant Design</span>
          </Link>
        </div>
        <div className={styles.desc}>Ant Design 是西湖区最具影响力的 Web 设计规范</div>
      </div>
      {children}
    </div>
    <GlobalFooter links={links} copyright={copyright} />
  </div>
);

export default UserLayout;
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-08 00:33
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Ant Design Pro中,UserLayout组件是一个包含多个子组件的父级组件。为了将这些子组件(例如 SelectLang, GlobalFooter 等)注入到 UserLayout 中,你需要按照以下步骤操作:

    1. 首先,在你的项目中引入必要的CSS和JavaScript库文件。
    <!-- CSS -->
    <link rel="stylesheet" href="https://unpkg.com/antd/dist/antd.css" />
    
    // JavaScript
    <script src="https://unpkg.com/antd/dist/antd.min.js"></script>
    
    1. 在你的组件中创建一个名为 UserLayout 的新组件,并将其作为父组件的子组件导入。
    import React from 'react';
    import { Layout, Menu, Button, Space, message } from 'antd';
    import { Link as RouterLink } from 'umi';
    import GlobalFooter from '@/components/GlobalFooter';
    import SelectLang from '@/components/SelectLang';
    import styles from './UserLayout.less';
    import logo from '../assets/logo.svg';
    
    const links = [
      {
        key: 'help',
        title: formatMessage({ id: 'layout.user.link.help' }),
        href: '',
      },
      {
        key: 'privacy',
        title: formatMessage({ id: 'layout.user.link.privacy' }),
        href: '',
      },
      {
        key: 'terms',
        title: formatMessage({ id: 'layout.user.link.terms' }),
        href: '',
      },
    ];
    
    const copyright = (
      <Fragment>
        Copyright <Icon type="copyright" /> 2018 蚂蚁金服体验技术部出品
      </Fragment>
    );
    
    class UserLayout extends React.Component {
      render() {
        return (
          <Layout className={styles.container}>
            {/* ... */}
          </Layout>
        );
      }
    }
    
    export default UserLayout;
    
    1. 接下来,你需要为每个子组件添加对应的属性或方法来处理它们的行为。例如,对于 SelectLang 组件,你可以使用 useSelectoruseDispatch 来获取语言选择器的状态和动作,然后更新 UserLayout 的状态或行为。

    2. 最后,你可以在 UserLayout 组件内部通过 props.children 属性接收所有子组件,并对它们进行渲染。这样,所有的子组件就可以被正确地注入到 UserLayout 中了。

    import React from 'react';
    import { Layout, Menu, Button, Space, message } from 'antd';
    import { Link as RouterLink } from 'umi';
    import GlobalFooter from '@/components/GlobalFooter';
    import SelectLang from '@/components/SelectLang';
    import styles from './UserLayout.less';
    import logo from '../assets/logo.svg';
    
    const links = [
      {
        key: 'help',
        title: formatMessage({ id: 'layout.user.link.help' }),
        href: '',
      },
      {
        key: 'privacy',
        title: formatMessage({ id: 'layout.user.link.privacy' }),
        href: '',
      },
      {
        key: 'terms',
        title: formatMessage({ id: 'layout.user.link.terms' }),
        href: '',
      },
    ];
    
    const copyright = (
      <Fragment>
        Copyright <Icon type="copyright" /> 2018 蚂蚁金服体验技术部出品
      </Fragment>
    );
    
    class UserLayout extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          lang: localStorage.getItem('lang') || 'zh-CN', // 获取本地存储中的语言,默认为中文
        };
      }
    
      handleLangChange = (e) => {
        const lang = e.target.value;
        localStorage.setItem('lang', lang); // 存储当前的语言
        this.setState({ lang });
      };
    
      componentDidMount() {
        if (localStorage.getItem('lang')) {
          this.setState({ lang: localStorage.getItem('lang') }); // 如果有存储,则从本地存储加载语言
        }
      }
    
      componentWillUnmount() {
        // 清除本地存储以避免内存泄漏
        localStorage.removeItem('lang');
      }
    
      render() {
        const { lang } = this.state;
    
        return (
          <Layout className={styles.container}>
            <Menu theme="dark">
              <Menu.Item key="home">
                <RouterLink to="/">Home</RouterLink>
              </Menu.Item>
              <Menu.Item key="about">About</Menu.Item>
            </Menu>
    
            <div style={{ padding: '0 16px' }}>
              <Space direction="vertical" size="middle">
                <Button type="primary">Login</Button>
                <Button>Logout</Button>
              </Space>
            </div>
    
            <GlobalFooter links={links} copyright={copyright} />
    
            <div className={styles.lang}>
              <SelectLang onChange={this.handleLangChange} defaultValue={lang} />
            </div>
    
            {/* ... */}
          </Layout>
        );
      }
    }
    
    export default UserLayout;
    

    现在,UserLayout 应用程序应该已经成功地将 SelectLangGlobalFooter 等子组件注入到了它自己的容器中。

    评论

报告相同问题?