React UI Element Placement?

Я новичок в React, поэтому меня ускользает от того, как размещать элементы пользовательского интерфейса.

Мне нужен следующий макет: React UI Element Placement?

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

Используя React Columns, я подумал, что могу настроить его, используя два столбца. Но потом я понял, что мне нужно каким-то образом связать флажки, чтобы это не было решением.

Тогда я подумал: "Почему бы не использовать сетку?" поэтому я обнаружил, что у Google есть сетки в их пакете материалов (что нормально, поскольку я использую их в любом случае), поэтому я импортировал их, но все еще не могу понять это правильно:

React UI Element Placement?

Как я могу это решить?

Мой код ниже:

return(
    <div>
        <Grid container spacing = {0}>
            <Grid item xs = {3}>
                <CheckboxContainer checkboxes = {checkboxes}/>
            </Grid>
            <Grid item xs = {9}>
                <Chart
                    height = "400px"
                    chartType = "ScatterChart"
                    loader = {<div>Loading Chart</div>}
                    data = {[
                        ['Level','Y'],
                        [-4,-1],
                        [-3,3],
                        [-2,-2],
                        [-1,1],
                        [0,5],
                        [1,14],
                        [2,5],
                        [3,3.5],
                        [4,7],
                    ]}
                    options = {{
                        title: 'Transparency',
                        hAxis: { title: 'Level', minValue: -9, maxValue: 9 },
                        vAxis: { title: 'Y', minValue: -9, maxValue: 9 },
                        legend: 'none',
                    }}
                    rootProps = {{ 'data-testid': '1'}}
                />
            </Grid>
            <Grid item xs = {12}>
                <CheckboxContainer checkboxes = {checkboxes} />
            </Grid>
        </Grid>
    </div>
)

Что именно не так с приведенным выше кодом? Я протестировал, и это выглядело так, как вы хотели ... вы используете material-ui и какую версию?

Guilherme Lemmi 27.12.2018 19:05

@GuilhermeLemmi Моя картина того, как это выглядит, совершенно не соответствует тому, как я хочу, чтобы это выглядело. Не могли бы вы показать мне, как это выглядит на вашем конце? Я смущен.

OmniOwl 27.12.2018 19:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
313
2

Ответы 2

Вы можете легко создать этот макет с помощью чистого CSS, используя flexbox для горизонтальных и вертикальных флажков и float для диаграммы разброса.

  render() {
    return (
    <div className = "page">      
      <div className = "main">
        <div className = "sidebar">
          <div>
            Check this 
            <input type = "checkbox"/>
          </div>
           <div>
            Check this 
            <input type = "checkbox"/>
          </div>        
        </div>
        <div className = "main">
          <div>
            Check this 
            <input type = "checkbox"/>
          </div>
           <div>
            Check this 
            <input type = "checkbox"/>
          </div>
        </div>
      </div>
      <div className = "footer">
        Scatter plot here
      </div>
    </div>
    );
.page {
  width: 100vw;
}

.main {
  display: flex;
}

.sidebar {
  display: flex;
  flex-direction: column;
  width: 20%;
}

.footer {
  float: right;
  width: 80%;
}

Посмотрите этот код в JSFiddle.

Это зависит от того, как вы работаете с CSS в своем проекте, но, используя последнюю версию создать-реагировать-приложение и материал-пользовательский интерфейс, я получил следующий результат:

Это используемый код:

import React from 'react';
import PropTypes from 'prop-types';
import Grid from '@material-ui/core/Grid';
import Checkbox from '@material-ui/core/Checkbox';
import { Chart } from "react-google-charts";
import { withStyles } from '@material-ui/core/styles';
import withRoot from '../withRoot';

const styles = theme => ({
  root: {
    textAlign: 'center',
    paddingTop: theme.spacing.unit * 20,
  },
  column1: {
    display:'flex',
    flexDirection:'column',
  },
  row2: {
    textAlign:'right',
  }
});

class Index extends React.Component {
  state = {
    open: false,
    checkedA: true,
    checkedB: true,
    checkedF: true
  };

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

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

  handleChangeEvent = name => event => {
    this.setState({ [name]: event.target.checked });
  };


  getCheckboxes = () => {
    return (
      <>
        <Checkbox
          checked = {this.state.checkedA}
          onChange = {this.handleChangeEvent('checkedA')}
          value = "checkedA"
        />
        <Checkbox
          checked = {this.state.checkedB}
          onChange = {this.handleChangeEvent('checkedB')}
          value = "checkedB"
          color = "primary"
        />
        <Checkbox value = "checkedC" />
        <Checkbox disabled value = "checkedD" />
        <Checkbox disabled checked value = "checkedE" />
        <Checkbox
          checked = {this.state.checkedF}
          onChange = {this.handleChangeEvent('checkedF')}
          value = "checkedF"
          indeterminate
        />
        <Checkbox defaultChecked color = "default" value = "checkedG" />
      </>
    );
  }

  render() {
    return(
          <div>
              <Grid container spacing = {0}>
                  <Grid item xs = {3} className = {this.props.classes.column1}>
                    {this.getCheckboxes()}
                  </Grid>
                  <Grid item xs = {9}>
                      <Chart
                        height = "400px"
                        chartType = "ScatterChart"
                        loader = {<div>Loading Chart</div>}
                        data = {[
                            ['Level','Y'],
                            [-4,-1],
                            [-3,3],
                            [-2,-2],
                            [-1,1],
                            [0,5],
                            [1,14],
                            [2,5],
                            [3,3.5],
                            [4,7],
                        ]}
                        options = {{
                            title: 'Transparency',
                            hAxis: { title: 'Level', minValue: -9, maxValue: 9 },
                            vAxis: { title: 'Y', minValue: -9, maxValue: 9 },
                            legend: 'none',
                        }}
                        rootProps = {{ 'data-testid': '1'}}
                    />
                  </Grid>
                  <Grid item xs = {12} className = {this.props.classes.row2}>
                    {this.getCheckboxes()}
                  </Grid>
              </Grid>
          </div>
      );
  }
}

Index.propTypes = {
  classes: PropTypes.object.isRequired,
};

export default withRoot(withStyles(styles)(Index));

Это не совсем так. puu.sh/CnUNu/856207186b.png Я использовал ваш код, но он не совсем похож на ваш.

OmniOwl 27.12.2018 20:18

Другие вопросы по теме