【问题标题】:Where I can change the profile picture in the react-admin header?我可以在哪里更改 react-admin 标头中的个人资料图片?
【发布时间】:2018-10-04 22:04:41
【问题描述】:

我在 react-admin(前 admin-on-rest)中使用社交登录,我有来自他社交媒体的用户图片,但是我没有找到如何更改右上角的用户个人资料图片屏幕:

是否需要设置任何道具,例如自定义登录或自定义注销按钮?

谢谢。

【问题讨论】:

    标签: reactjs admin-on-rest react-admin


    【解决方案1】:

    目前,该过程涉及大量代码,因为您必须完全重写UserMenu。要使用它,您还必须使用自定义AppBar 实现自定义Layout。合并https://github.com/marmelab/react-admin/pull/2391时会简化流程。

    // in src/MyUserMenu.js
    import React, { Children, cloneElement } from 'react';
    import PropTypes from 'prop-types';
    import Tooltip from '@material-ui/core/Tooltip';
    import IconButton from '@material-ui/core/IconButton';
    import Menu from '@material-ui/core/Menu';
    import AccountCircle from '@material-ui/icons/AccountCircle';
    import { translate } from 'ra-core';
    
    class UserMenu extends React.Component {
        static propTypes = {
            children: PropTypes.node,
            label: PropTypes.string.isRequired,
            logout: PropTypes.node,
            translate: PropTypes.func.isRequired,
        };
    
        static defaultProps = {
            label: 'ra.auth.user_menu',
        };
    
        state = {
            auth: true,
            anchorEl: null,
        };
    
        handleChange = (event, checked) => {
            this.setState({ auth: checked });
        };
    
        handleMenu = event => {
            this.setState({ anchorEl: event.currentTarget });
        };
    
        handleClose = () => {
            this.setState({ anchorEl: null });
        };
    
        render() {
            const { children, label, logout, translate } = this.props;
            if (!logout && !children) return null;
            const { anchorEl } = this.state;
            const open = Boolean(anchorEl);
    
            return (
                <div>
                    <Tooltip title={label && translate(label, { _: label })}>
                        <IconButton
                            arial-label={label && translate(label, { _: label })}
                            aria-owns={open ? 'menu-appbar' : null}
                            aria-haspopup="true"
                            onClick={this.handleMenu}
                            color="inherit"
                        >
                            {/* Replace this icon with whatever you want, a user avatar or another icon */}
                            <AccountCircle />
                        </IconButton>
                    </Tooltip>
                    <Menu
                        id="menu-appbar"
                        anchorEl={anchorEl}
                        anchorOrigin={{
                            vertical: 'top',
                            horizontal: 'right',
                        }}
                        transformOrigin={{
                            vertical: 'top',
                            horizontal: 'right',
                        }}
                        open={open}
                        onClose={this.handleClose}
                    >
                        {Children.map(children, menuItem =>
                            cloneElement(menuItem, { onClick: this.handleClose })
                        )}
                        {logout}
                    </Menu>
                </div>
            );
        }
    }
    
    export default translate(UserMenu);
    
    // in src/MyAppBar.js
    import { AppBar } from 'react-admin';
    import MyUserMenu from './MyUserMenu';
    
    const MyAppBar = (props) => <AppBar {...props} userMenu={MyUserMenu} />;
    
    // in src/MyLayout.js
    import { Layout } from 'react-admin';
    import MyAppBar from './MyAppBar';
    
    const MyLayout = (props) => <Layout {...props} appBar={MyAppBar} />;
    
    export default MyLayout;
    

    文档:https://marmelab.com/react-admin/Theming.html#using-a-custom-appbar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2019-09-14
      • 1970-01-01
      相关资源
      最近更新 更多