Material-ui: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд ListItem рдХрдиреНрд╡рд░реНрдЯ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдЕрдЧре░ 2017  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mui-org/material-ui

рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ ListItem рдХреЛ List рд╕реЗ Link рдШрдЯрдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореЗрд░реЗ рдкрд╛рд╕ Drawer рдШрдЯрдХ рд╣реИ, рдЬреЛ List рдШрдЯрдХ рд╕реЗ рдмрдирд╛ рд╣реИ,
рд╡рд╣ рд╕реВрдЪреА 4 ListItem s рд╕реЗ рдмрдиреА рд╣реИред
рдЬреЛ рдореИрдВ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ ListItem рдХреЛ рдПрдХ рд░рд┐рдПрдХреНрдЯрд░ рд░рд╛рдЙрдЯрд░ Link рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред
рдореИрдВрдиреЗ рджрд░рд╛рдЬ рдХреЗ рдСрдирдХреНрд▓рд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдХреНрд▓рд┐рдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдХреА рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЖрдИрдбреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛ рдХрд╛ рд╕реНрдерд╛рди рдмрджрд▓реЗрдВред
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рдирд┐рд░реНрдгрд╛рдпрдХ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВред
рдореИрдВ рднреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА Link рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП component рдореЗрдВ рдкреНрд░реЛрдк ListItem , рд▓реЗрдХрд┐рди рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реБрдИред (рдореИрдВ рдЖрдк рдореЗрдВ рдПрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ рджреЗрдЦрд╛ рд╣реИ component рдореЗрдВ рдкреНрд░реЛрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝)ред
рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?

import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { withStyles } from 'material-ui/styles';
import Drawer from 'material-ui/Drawer';
import List, { ListItem, ListItemIcon, ListItemText } from 'material-ui/List';
import Face from 'material-ui-icons/Face';
import Person from 'material-ui-icons/Person';
import Assignment from 'material-ui-icons/Assignment';
import Link from 'react-router-dom/Link';
import { FormattedMessage } from 'react-intl';

const styles = {
   list: {
      width: 250,
      flex: 'initial',
    },
};

 class UndockedDrawer extends Component {

   constructor() {
      super();
      this.onClick = this.onClick.bind(this);
    }

    onClick(e, data) {
       console.log(data);
       this.props.onRequestClose();
     }

   render() {
       const classes = this.props.classes;
        const sidebarListItems = (
     <div>
         <ListItem button >
            <ListItemIcon>
               <Person />
           </ListItemIcon>
            <ListItemText primary={<FormattedMessage id="user" />} />
          </ListItem>
    <ListItem button>
      <ListItemIcon>
        <Assignment />
      </ListItemIcon>
      <ListItemText primary={<FormattedMessage id="consultant" />} />
    </ListItem>
    <ListItem button>
      <ListItemIcon>
        <Face />
      </ListItemIcon>
      <ListItemText primary={<FormattedMessage id="student" />} />
    </ListItem>
  </div>
);

const sidebarList = (
  <div>
    <List className={classes.list} >
      {sidebarListItems}
    </List>
  </div>
);

return (
  <div>
    <Drawer
      anchor="right"
      open={this.props.open}
      onRequestClose={this.props.onRequestClose}
      onClick={this.onClick}
    >
      {sidebarList}
    </Drawer>
   </div>
   );
   }
 }

  UndockedDrawer.propTypes = {
     classes: PropTypes.shape({}).isRequired,
     open: PropTypes.bool.isRequired,
     onRequestClose: PropTypes.func.isRequired,
    };

   export default withStyles(styles)(UndockedDrawer);
  • рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ: 1.0.6-рдмреАрдЯрд╛
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: ^ 15.6.1
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдХреНрд░реЛрдо: 60
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░-рдбреЛрдо: ^ 4.1.2

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ: https://material-ui.com/compenders/buttons/#third -party-routing-Libraryред

import React from 'react';
import { MemoryRouter as Router } from 'react-router';
import { Link, LinkProps } from 'react-router-dom';
import ListItem from '@material-ui/core/ListItem';
import { Omit } from '@material-ui/types';

// The usage of React.forwardRef will no longer be required for react-router-dom v6.
// see https://github.com/ReactTraining/react-router/issues/6056
const AdapterLink = React.forwardRef<HTMLAnchorElement, LinkProps>((props, ref) => (
  <Link innerRef={ref as any} {...props} />
));

const CollisionLink = React.forwardRef<HTMLAnchorElement, Omit<LinkProps, 'innerRef' | 'to'>>(
  (props, ref) => <Link innerRef={ref as any} to="/getting-started/installation/" {...props} />,
);

export default function ButtonRouter() {
  return (
    <Router>
      <ListItem color="primary" component={AdapterLink} to="/">
        Simple case
      </ListItem>
      <ListItem component={CollisionLink}>Avoids props collision</ListItem>
    </Router>
  );
}

рд╕рднреА 21 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрд╛, рдореИрдВ ListItem рдХреЛ Link рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рдкреЗрдЯ рд╕рдХрддрд╛ рд╣реВрдВ:

<Link to="users" style={{ textDecoration: 'none' }}>
      <ListItem button >
        <ListItemIcon>
          <Person />
        </ListItemIcon>
        <ListItemText primary={<FormattedMessage id="user" />} />
      </ListItem>
    </Link>

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдСрдирдХреНрд▓рд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рднреА рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХрд┐рд╕реА рднреА рд╕реБрдЭрд╛рд╡ рдпрд╛ imporvements?

рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛, рдореИрдВ рдЕрдиреБрд╕рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдореЗрдВ ListItem рд▓рдкреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╢рдмреНрджрд╛рд░реНрде рд░реВрдк рд╕реЗ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдкреНрд░рд▓реЗрдЦрди рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ:

https://github.com/callemall/material-ui/blob/92bd073015b9cc0dff3a26195fcb49153ddaab78/docs/src/modules/compenders/AppDrawerNavItem.js#L71 -L83 -L83

рдЖрдк рднреА рдЗрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ

https://github.com/callemall/material-ui/blob/92bd073015b9cc0dff3a26195fcb49153ddaab78/docs/src/pages/pemos/buttons/FlatButtons.js#L40 -L4242-L4242

рдпрд╣ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ: https://material-ui.com/compenders/buttons/#third -party-routing-Libraryред

import React from 'react';
import { MemoryRouter as Router } from 'react-router';
import { Link, LinkProps } from 'react-router-dom';
import ListItem from '@material-ui/core/ListItem';
import { Omit } from '@material-ui/types';

// The usage of React.forwardRef will no longer be required for react-router-dom v6.
// see https://github.com/ReactTraining/react-router/issues/6056
const AdapterLink = React.forwardRef<HTMLAnchorElement, LinkProps>((props, ref) => (
  <Link innerRef={ref as any} {...props} />
));

const CollisionLink = React.forwardRef<HTMLAnchorElement, Omit<LinkProps, 'innerRef' | 'to'>>(
  (props, ref) => <Link innerRef={ref as any} to="/getting-started/installation/" {...props} />,
);

export default function ButtonRouter() {
  return (
    <Router>
      <ListItem color="primary" component={AdapterLink} to="/">
        Simple case
      </ListItem>
      <ListItem component={CollisionLink}>Avoids props collision</ListItem>
    </Router>
  );
}

рдореИрдВ рдЗрд╕реЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛:
https://material-ui-next.com/demos/lists/
https://material-ui-next.com/demos/drawers/

рдпрд╣ рдПрдХ рдЖрдо рдмрд╛рдд рд╣реИ рдЬрдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░реВрдЯрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ NavLink рдПрдХ рдореЗрдВ ListItem ред
Button component рдкреНрд░реЛрдк рдХреЗ рд╕рд╛рде?
рдФрд░ рдмрдЯрди рдкреНрд░реЙрдкреНрд╕ рдФрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдПрдХ рд╣реА JSX рдЯреИрдЧ рдкрд░ рдПрдХ рд╕рд╛рде рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдЗрд╕ рддрд░рд╣ рдХрд╛ рдорд┐рдХреНрд╕рдЪрд░ рдХреНрдпрд╛ рд╣реИ?
рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ?

@Mehrdaad рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд▓рд┐рдВрдХ рд╕рд╛рдорд╛рдиреНрдп MUI рд╕реВрдЪреА рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм @oliviertassinari рдиреЗ component={Link} рдХрд┐рдпрд╛, рддреЛ рд╢реИрд▓реА рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рдЧрдИ:
(рдЫрд╡рд┐ рдореЗрдВ рдорд╛рдЙрд╕ "рдмрд┐рд▓реНрдб" рдкрд░ рдордБрдбрд░рд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдЖрдЗрдЯрдо рдЕрдВрдбрд░рд▓рд╛рдЗрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ...)

screen shot 2017-11-16 at 12 09 05

@ilyador рдпрд╣ UI рд▓рд┐рдВрдХ рд╢реИрд▓реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред

@ zhangwei900808 рдирд╣реАрдВ, рдпрд╣ рдЕрднреА рднреА рд╢рдмреНрджрд╛рд░реНрде рд╕реЗ рдЧрд▓рдд рд╣реИ, рдпрд╣ <ul><a ..>... рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
https://codesandbox.io/s/lpwq74p30m

рдмрд╕ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрддреНрддрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

@oliviertassinari рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛:

const styles = {
    li: {
        '&:hover': {
            backgroundColor: 'transparent',
        },
    },
};
// ...
<MenuItem disableGutters className={classes.li}>
    <Button component={Link} to="/logout" ...

рдПрдХ рдбрдмрд▓ рд╣реЙрд╡рд░ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, MenuItem рдФрд░ Button (рдЬрд┐рд╕рдореЗрдВ рдЕрднреА рднреА рдереЛрдбрд╝рд╛ рд╕рд╛ рдЧрдЯрд░ / рдкреИрдбрд┐рдВрдЧ рд╣реИ, рдПрдХ рдФрд░ рдореБрджреНрджрд╛)
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмреЛрдЭрд┐рд▓ рд╣реИ

рдбреЗрдореЛ: https://codesandbox.io/s/nk834yk5pl ( component={Link} to="/..." рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╣реА рд╣реИ)

@ рдХреНрдпреВрдм рдЖрдк рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдЯрди рдШрдЯрдХ рдХрд╛ рдкрд░рд┐рдЪрдп рдХреНрдпреЛрдВ рджреЗ рд░рд╣реЗ рд╣реИрдВ? рдЖрдк MenuItem рдкрд░ рдШрдЯрдХ рдЧреБрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@oliviertassinari рдХреНрдпреЛрдВрдХрд┐ ul > a рд╡реИрдз рдирд╣реАрдВ рд╣реИ html5 https://codesandbox.io/s/lpwq74p30m

@ рдХреЗрдХ nav > a рд╡реИрдз рд╣реИред

рдареАрдХ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж, рдареАрдХ рд╣реИ https://codesandbox.io/s/lpwq74p30m

рдпрд╣рд╛рдБ рд╕рдорд╛рдзрд╛рди рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ

<List>
        {menus.map((menu: any, index: any) => {
          return (
            <ListItem
              key={index}
              {...{ to: menu.link }}
              component={Link}
              button={true}
            >
              <ListItemIcon>{menu.icon}</ListItemIcon>
              <ListItemText primary={menu.text} />
            </ListItem>
          );
        })}
      </List>

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ ListItem рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдХреБрдВрдЬреА = {рдЗрдВрдбреЗрдХреНрд╕}
** {... {рд╕реЗ: menu.link}} **
рдШрдЯрдХ = {рд▓рд┐рдВрдХ}
рдмрдЯрди = {} рд╕рдЪ
>

import {Link} from 'react-router-dom'

<ListItem component={Link} to="/" button>

// or
<ListItem component={props => <Link to="/" {...props} />} button>

@mehrdaad @oliviertassinari рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ^ _ ^

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рдерд╛ред рдзрдиреНрдпрд╡рд╛рдж!

MUI v4 рдорд╛рдЗрдЧреНрд░реЗрд╢рди (рдореИрдВ 4.3.1 рдкрд░) рдХреЗ рдмрд╛рдж рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╡реЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрддреНрддрд░ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ "рдлрдВрдХреНрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рд░рд┐рдл рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд░реЗрдл рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм React.forwardRef ()?"

рдореИрдВрдиреЗ рдПрдХ рд░реИрдкрд░ рдХреА рддрд░рд╣ NavLink рдШрдЯрдХ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

import React, { Component } from "react"
import { NavLink } from "react-router-dom"

/**
 * React Router Nav Link wrapper to forward the ref to fix "Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?"
 *
 * From https://material-ui.com/guides/composition/#caveat-with-refs
 */
class NavLinkMui extends Component {
    render() {
        const { forwardedRef, ...props } = this.props
        return <NavLink {...props} ref={forwardedRef} />
    }
}

export default NavLinkMui

рдЙрдкрдпреЛрдЧ:

<ListItem
    button
    component={NavLinkMui}
    to='/'
>
    <ListItemIcon>
        <SlideshowIcon />
    </ListItemIcon>
</ListItem>

@ рд╣реНрдпреВрдЧреЛрдЧреНрд░реЗрд╕ рд╣рд╛рдВ, рдЖрдкрдХреЛ рдЖрдЧреЗ рд░реЗрдлрд░реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдЙрддреНрддрд░ рдХреЗ рд╕рд╛рде https://github.com/mui-org/material-ui/issues/7956#issuecomment -326908167 рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдареАрдХ рд╣реИред

@oliviertassinari рдиреЗ рдХрд┐рдпрд╛ред

рдореИрдВ рдЕрднреА рднреА рдЖрдЧреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдЖрдЧреЗ рд╕рдорд╛рдзрд╛рди рдпрд╛ рдШрдЯрдХ рдПрдХ рдЬрд╣рд╛рдБ рдмрдЯрди рдкрд╛рда рд░рдВрдЧ рд╡рд┐рд╖рдп рдкреИрд▓реЗрдЯ рд░рдВрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд▓реЗ рд░рд╣рд╛ рд╣реИред рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд░рдВрдЧ palette.type: 'dark' рд╕реЗ рдореИрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдлрд╝реЗрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕рдлрд╝реЗрдж рд╣реИред

рд╢рд╛рдпрдж MUI рдкрд░ рдПрдХ рдмрджрд▓рд╛рд╡ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ component рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред
Capture d'e╠Бcran 2019-08-06 16 54 51

рдпрд╣рд╛рдБ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк ListItemText рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╣рд╛рд░рд╛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...

<ListItemText
    primaryTypographyProps={{
        color: 'textPrimary'
    }}
    primary="Dashboard"
/>

BTW, рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЕрдм TS рдореЗрдВ рд╣реИред

рдпрд╣рд╛рдБ рд╕рдорд╛рдзрд╛рди рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ

<List>
        {menus.map((menu: any, index: any) => {
          return (
            <ListItem
              key={index}
              {...{ to: menu.link }}
              component={Link}
              button={true}
            >
              <ListItemIcon>{menu.icon}</ListItemIcon>
              <ListItemText primary={menu.text} />
            </ListItem>
          );
        })}
      </List>

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ ListItem рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдХреБрдВрдЬреА = {рдЗрдВрдбреЗрдХреНрд╕}
** {... {рд╕реЗ: menu.link}} **
рдШрдЯрдХ = {рд▓рд┐рдВрдХ}
рдмрдЯрди = {} рд╕рдЪ
>

button={true} рдмрд╕ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓рд┐рдВрдХ рдХреЗ UI рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдорд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП:

рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ListItem рдШрдЯрдХ рдЧреБрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгListItem рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рддрддреНрд╡ред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЯреНрд░рд┐рдХ рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╡рд╛рдВрдЫрд┐рдд рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рд╕реНрдЯ рдЗрдЯреЗрдо рдХреЗ рдкреНрд░реЙрдкреНрд╕ рдкрд░ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ (...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рд┐рд╕реНрдЯ рдЗрдЯ рдХреЗ рд▓рд┐рдП "рдЯреВ" рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд▓рд╛рдПрдЧрд╛ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ) рддреНрд░реБрдЯрд┐ TS2769 рд╕рдВрдкрддреНрддрд┐ 'рдШрдЯрдХ' рдкреНрд░рдХрд╛рд░ рдкрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ 'IntrinsicAttributes ...)

import { NavLink } from "react-router-dom";

        <List>
            <ListItem button={true} {...{ component: NavLink, to: "/Somewhere" }}>
                <ListItemIcon>
                    <ShoppingCartIcon />
                </ListItemIcon>
                <ListItemText primary="Orders" />
            </ListItem>
        </List>

рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдпрджрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ListItem рдкрд░ рдПрдХ рдСрдирдХреНрд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:


    <List>
        <ListItem button={true} {...{ onClick: () => alert("foo") }}>
            <ListItemIcon>
                <DashboardIcon />
            </ListItemIcon>
            <ListItemText primary="Dashboard" />
        </ListItem>
    </List>

`` `

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛

const NavLinkMui = React.forwardRef((props, ref) => (
  <NavLink {...props} activeClassName="Mui-selected" ref={ref} />
))
<ListItem button component={NavLinkMui} to={to}>{text}</ListItem>

MUI v4 рдорд╛рдЗрдЧреНрд░реЗрд╢рди (рдореИрдВ 4.3.1 рдкрд░) рдХреЗ рдмрд╛рдж рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╡реЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрддреНрддрд░ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ "рдлрдВрдХреНрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рд░рд┐рдл рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд░реЗрдл рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм React.forwardRef ()?"

рдореИрдВрдиреЗ рдПрдХ рд░реИрдкрд░ рдХреА рддрд░рд╣ NavLink рдШрдЯрдХ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

import React, { Component } from "react"
import { NavLink } from "react-router-dom"

/**
 * React Router Nav Link wrapper to forward the ref to fix "Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?"
 *
 * From https://material-ui.com/guides/composition/#caveat-with-refs
 */
class NavLinkMui extends Component {
    render() {
        const { forwardedRef, ...props } = this.props
        return <NavLink {...props} ref={forwardedRef} />
    }
}

export default NavLinkMui

рдЙрдкрдпреЛрдЧ:

<ListItem
    button
    component={NavLinkMui}
    to='/'
>
    <ListItemIcon>
        <SlideshowIcon />
    </ListItemIcon>
</ListItem>

рдзрдиреНрдпрд╡рд╛рдж @HugoGresse рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :-)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

anthony-dandrea picture anthony-dandrea  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TimoRuetten picture TimoRuetten  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

finaiized picture finaiized  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

reflog picture reflog  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

iamzhouyi picture iamzhouyi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ