У меня возникают проблемы с отображением списка в React JS с использованием пользовательского интерфейса материала - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь отобразить список, используя реакцию Js. Есть 3 сетки, я хочу, чтобы сначала был список городов, и когда я нажимаю на него, я получаю пользователя с тем же городом, а затем, когда я нажимаю на пользователей, я должен получить их данные. Также есть неназначенный элемент списка, который должен отображаться, если у пользователя нет названия города

...
import React from "react";
export default class App extends React.Component 
{

constructor() 
{

   super();

    this.state = {
      city: {
        id: [1, 2, 3],
        name: ["a", "b", "c"]
      },
      user: {
        id: [1, 2, 3, 4, 5],
        name: ["q", "w", "e", "f", "g"],
        cityId: [2, 1, 3]
      },

      detail: {
        userId: [3, 2, 1, 4, 5],
        address: ["usa", "china", "india", "UK", "Japan"]
      },
      marker: null
    };
  }
  change(id) {
    this.setState({ marker: id });
  }
  render() {
    console.log(this.state);
    return (
      <Grid container>
        {/* //city list */}
        <Grid>
          <List>
            {this.state.city.id.map((id, index) => {
              return (
                <ListItem
                  key={id}
                  button
                  onClick={() => {
                    this.change(id);
                  }}
                >
                  <ListItemText primary={this.state.city.name[index]} />
                </ListItem>
              );
            })}
            <ListItem
              key="unassigned"
              button
              onClick={() => {
                this.change("unassigned");
              }}
            >
              <ListItemText primary={"unassigned"} key={"unassigned"} />
            </ListItem>
          </List>
        </Grid>

        {/* //list of users where they live */}
        <Grid>
          {this.state.city.id.map((cityId, index) => {
            switch (this.state.marker) {
              case cityId: {
                return (
                  <List>
                    {this.state.user.id.map((userId, index) => {
                      if (cityId === this.state.user.cityId[index]) {
                        return (
                          <List>
                            <ListItem
                              key={userId}
                              button
                              onClick={() => {
                                this.change(String(userId));
                              }}
                            >
                              <ListItemText
                                primary={this.state.user.name[index]}
                              />
                            </ListItem>
                          </List>
                        );
                      }
                    })}
                  </List>
                );
              }
              case "unassigned": {
                return (
                  <List>
                    {this.state.user.id.map((userId, index) => {
                      if (cityId !== this.state.user.cityId[index]) {
                        return (
                          <List>
                            <ListItem
                              key={userId}
                              button
                              onClick={() => {
                                this.change(String(userId));
                              }}
                            >
                              <ListItemText
                                primary={this.state.user.name[index]}
                              />
                            </ListItem>
                          </List>
                        );
                      }
                    })}
                  </List>
                );
              }
              default:
                return null;
            }
          })}
        </Grid>

        {/* //details of users*/}
        <Grid>
          {this.state.detail.userId.map((userId, index) => {
            switch (this.state.marker) {
              case String(userId): {
                return (
                  <List>
                    <ListItem
                      key={userId}
                      button
                      onClick={() => {
                        this.change(userId);
                      }}
                    >
                      <ListItemText
                        primary={this.state.detail.address[index]}
                      />
                    </ListItem>
                  </List>
                );
              }
              default:
                return null;
            }
          })}
        </Grid>
      </Grid>
    );
  }
}

...

Я пробовал реализовать это в песочнице кода, вот ссылка https://codesandbox.io/s/focused-shamir-y85v9?file= / src / App. js: 0-4390

1 Ответ

1 голос
/ 27 мая 2020

Вам нужно отслеживать выбранного пользователя и город независимо.

Добавьте второй трекер в свое состояние и сохраните там выбранного пользователя.

Вот ваша обновленная, работающая песочница .

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