Как преобразовать «Функциональную компоненту» в «Компонент класса» в React в Material-UI - PullRequest
0 голосов
/ 30 октября 2019

Т.е. я хочу использовать этот пример Material-UI в качестве компонента класса. Как?

import React from 'react';
import Button from '@material-ui/core/Button';
import Menu from '@material-ui/core/Menu';
import MenuItem from '@material-ui/core/MenuItem';

export default function SimpleMenu() {
  const [anchorEl, setAnchorEl] = React.useState(null);

  const handleClick = event => {
    setAnchorEl(event.currentTarget);
  };

  const handleClose = () => {
    setAnchorEl(null);
  };

  return (
    <div>
      <Button aria-controls="simple-menu" aria-haspopup="true" onClick={handleClick}>
        Open Menu
      </Button>
      <Menu
        id="simple-menu"
        anchorEl={anchorEl}
        keepMounted
        open={Boolean(anchorEl)}
        onClose={handleClose}
      >
        <MenuItem onClick={handleClose}>Profile</MenuItem>
        <MenuItem onClick={handleClose}>My account</MenuItem>
        <MenuItem onClick={handleClose}>Logout</MenuItem>
      </Menu>
    </div>
  );
}

Это вызвало много ошибок, поэтому я удалил 'const', но все равно получаю много проблем.

enter image description here

1 Ответ

2 голосов
/ 30 октября 2019

Я не знаю, почему вы хотите преобразовать функциональный компонент в основанный на классе (обычно происходит наоборот). Но это выглядит примерно так:

import React from 'react';
import Button from '@material-ui/core/Button';
import Menu from '@material-ui/core/Menu';
import MenuItem from '@material-ui/core/MenuItem';

export default class SimpleMenu extends React.Component {
    state = {
        anchorEl: null
    }

    handleClick = event => this.setState({ anchorEl: event.currentTarget })
    handleClose = () => this.setState({ anchorEl: null })

    render() {
        const { anchorEl } = this.state
        return (
            <div>
                <Button aria-controls="simple-menu" aria-haspopup="true" onClick={this.handleClick}>
                    Open Menu
              </Button>
                <Menu
                    id="simple-menu"
                    anchorEl={anchorEl}
                    keepMounted
                    open={Boolean(anchorEl)}
                    onClose={this.handleClose}
                >
                    <MenuItem onClick={this.handleClose}>Profile</MenuItem>
                    <MenuItem onClick={this.handleClose}>My account</MenuItem>
                    <MenuItem onClick={this.handleClose}>Logout</MenuItem>
                </Menu>
            </div>
        );
    }
}

Обратите внимание, что useState - это ловушка, которая не поддерживается в компонентах на основе классов, вместо этого вы должны использовать классические this.state и this.setState. Не забудьте о this перед вызовом ваших обработчиков: this.handleClick

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...