Невозможно точно настроить сетки в интерфейсе материала.

Я пытаюсь создать образец приложения для тестирования пользовательского интерфейса реагирующего материала, и я застрял при использовании сеток. У меня есть две сетки в моем приложении внутри основного контейнера сетки. Одна сетка предназначена для списков, а другая - для просмотра карты. теперь всякий раз, когда элементы списка увеличиваются, на странице отображается ползунок для его перемещения вверх / вниз, что мне не нужно, поскольку я хочу, чтобы карта оставалась стабильной на экране, покрывая 100% высоты и 80% ширины. Но как только размер списка увеличивается, карта также становится прокручиваемой на странице. Как я могу это исправить? Более того, мои кнопки списка также могут перемещаться по подзаголовку списка, что я не знаю, как это остановить.

мой код ...

import React from "react";
import {
  List,
  ListItem,
  Grid,
  Paper,
  Button,
  ListSubheader
} from "@material-ui/core";
import { Map, Marker, Popup, TileLayer } from "react-leaflet";
import L from "leaflet";
import "leaflet/dist/leaflet.css";
import "./styles.css";
import Icon from "../src/icon.png";
import shadow from "../src/shadow.png";

export default class App extends React.Component {
  constructor() {
    super();
    this.state = {
      location: [
        {
          id: 1,
          machine: 1,
          lat: 51.503,
          lng: -0.091
        },

        {
          id: 2,
          machine: 2,
          lat: 51.56,
          lng: -0.094
        }
      ],
      center: [51.505, -0.091],
      zoom: 11,
      marker: null
    };
    this.clickAction = this.clickAction.bind(this);
  }

  Icon = L.icon({
    iconUrl: Icon,
    shadowUrl: shadow,
    iconSize: [38, 50],
    shadowSize: [50, 64],
    iconAnchor: [22, 34], // point of the icon which will correspond to marker's location
    shadowAnchor: [4, 62],
    popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor
  });

  clickAction(id, lat, lng) {
    this.setState({ marker: id, zoom: 16, center: [lat, lng] });
  }

  render() {
    const styles = {
      Paper: {
        padding: 20,
        marginTop: 10,
        marginBottom: 10,
        height: "90%",
        overflowY: "auto"
      }
    };

    return (
      <Grid container>
        <Grid item xs>
          <Paper style={styles.Paper}>
            <List
              style={{ width: "20%", float: "left" }}
              subheader={
                <ListSubheader component="div">
                  <div>
                    <h1> my appplication </h1>
                  </div>
                </ListSubheader>
              }
            >
              {this.state.location.map(({ id, machine, lat, lng }) => {
                return (
                  <>
                    <ListItem
                      key={id}
                      button
                      onClick={() => {
                        this.clickAction(id, lat, lng);
                      }}
                    >
                      Id {id} <br />
                      machine {machine}
                    </ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                    <ListItem button>a</ListItem>
                  </>
                );
              })}
              <Button style={{ position: "sticky", botton: "0", left: "0" }}>
                sign out
              </Button>
            </List>
          </Paper>
        </Grid>

        <Map center={this.state.center} zoom={this.state.zoom}>
          <TileLayer
            attribution='&amp;copy <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
            url="https://{s}.tile.osm.org/{z}/{x}/{y}.png"
          />
          {this.state.location.map(({ lat, lng, id }) => {
            return (
              <Marker position={[lat, lng]} icon={this.Icon}>
                <Popup> {id} </Popup>
              </Marker>
            );
          })}
        </Map>
      </Grid>
    );
  }
}

...

мой образец приложения находится здесь https://codesandbox.io/s/rough-mountain-ogf4v?file=/src/App.js:0-3720


person death stranding    schedule 25.06.2020    source источник


Ответы (1)


Вам необходимо удалить эти:

  padding: 20,
  marginTop: 10,
  marginBottom: 10,

добавьте height: 100vh к styles и поставьте style={{ backgroundColor: "white" }} на ваш ListSubheader комп.

Обновленная демонстрация

person kboul    schedule 25.06.2020
comment
Без проблем. Пожалуйста, примите и / или проголосуйте за ответ, если он вам помог. - person kboul; 25.06.2020
comment
привет, весь мой текст в списке в основном наклонен к левой стороне, хотя справа все еще так много места, и то же самое касается кнопок, они доступны только с самого левого конца. Есть ли способ решить эту проблему? - person death stranding; 29.06.2020
comment
Первое, что вам нужно сделать, это принять ответ, поскольку вы сказали, что он сработал и решил вашу проблему. Во-вторых, откройте новую тему, чтобы задать свой новый вопрос, поскольку он полностью отличается от исходного сообщения. - person kboul; 29.06.2020
comment
Принятие ответа означает, что вы нажимаете галочку с зеленой стрелкой под кнопками голосования. Проверьте здесь. Вы этого не сделали. Вы всегда должны принимать ответ, если он решил вашу проблему, на каждый вопрос вы получите удовлетворительный ответ, который решил вашу проблему. Не только в этом, но и во всех ответах в других ваших сообщениях, если они решили вашу проблему. - person kboul; 29.06.2020