Я новичок в React, поэтому меня ускользает от того, как размещать элементы пользовательского интерфейса.
Но я не могу этого понять. В черном ящике должна быть группа флажков (компонент, который я уже сделал), располагающийся вертикально, а в синем поле - та же группа флажков, но размещенных по горизонтали. В красном поле - диаграмма разброса Google (которую я тоже настроил).
Используя React Columns, я подумал, что могу настроить его, используя два столбца. Но потом я понял, что мне нужно каким-то образом связать флажки, чтобы это не было решением.
Тогда я подумал: "Почему бы не использовать сетку?" поэтому я обнаружил, что у Google есть сетки в их пакете материалов (что нормально, поскольку я использую их в любом случае), поэтому я импортировал их, но все еще не могу понять это правильно:
Как я могу это решить?
Мой код ниже:
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>
)
@GuilhermeLemmi Моя картина того, как это выглядит, совершенно не соответствует тому, как я хочу, чтобы это выглядело. Не могли бы вы показать мне, как это выглядит на вашем конце? Я смущен.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете легко создать этот макет с помощью чистого 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 Я использовал ваш код, но он не совсем похож на ваш.
Что именно не так с приведенным выше кодом? Я протестировал, и это выглядело так, как вы хотели ... вы используете material-ui и какую версию?