Визуализация компонента диалога в цикле несколько раз - PullRequest
0 голосов
/ 30 января 2019

Я сейчас экспериментирую с React и Material-UI.

У меня есть компонент, который включает в себя другой компонент.Внутри render() я перебираю псевдомассив, который отображает компонент <FormDialog />.

  <ul>
     {tableContent.map((item, i) => 
       <li key={i}>{item.x}
          <FormDialog/>
      </li>
  )}
  </ul>

При проверке DOM с использованием REACT-TOOLS я, конечно, вижу, что компонент Dialog находится там 3 раза.

DOM

В настоящее время я спрашиваю себя, является ли это плохой практикой и приведет ли это к серьезным проблемам с производительностью в реальном мире, когда я рендую Компонент примерно 20-50 раз.

В случае, если это проблема

Что мне действительно нравится, так это то, что компонент Dialog просто работает "из коробки" и не нуждается ни в каком другом компоненте "action" длябыть открытым или закрытым.Поэтому я не вижу возможности сохранить отличную самосогласованную функциональность компонента диалога, когда этот пример будет плохой практикой и принесет мне большие проблемы с производительностью.

Это диалоговый компонент, только что скопированный из демо-версии Material-UI:

import React from 'react';
import Button from '@material-ui/core/Button';
import TextField from '@material-ui/core/TextField';
import Dialog from '@material-ui/core/Dialog';
import DialogActions from '@material-ui/core/DialogActions';
import DialogContent from '@material-ui/core/DialogContent';
import DialogContentText from '@material-ui/core/DialogContentText';
import DialogTitle from '@material-ui/core/DialogTitle';

export default class FormDialog extends React.Component {
  state = {
    open: false,
  };

  handleClickOpen = () => {
    this.setState({ open: true });
  };

  handleClose = () => {
    this.setState({ open: false });
  };

  render() {
    return (
      <div>
        <Button variant="outlined" color="primary" onClick={this.handleClickOpen}>
          Open form dialog
        </Button>
        <Dialog
          open={this.state.open}
          onClose={this.handleClose}
          aria-labelledby="form-dialog-title"
        >
          <DialogTitle id="form-dialog-title">Subscribe</DialogTitle>
          <DialogContent>
            <DialogContentText>
              To subscribe to this website, please enter your email address here. We will send
              updates occasionally.
            </DialogContentText>
            <TextField
              autoFocus
              margin="dense"
              id="name"
              label="Email Address"
              type="email"
              fullWidth
            />
          </DialogContent>
          <DialogActions>
            <Button onClick={this.handleClose} color="primary">
              Cancel
            </Button>
            <Button onClick={this.handleClose} color="primary">
              Subscribe
            </Button>
          </DialogActions>
        </Dialog>
      </div>
    );
  }
}

Итак, о чем я вас спрашиваю

1)Я хотел бы знать, является ли то, что я описал, плохим, и его следует избегать в реальном мире, например

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

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