Nano Hash - криптовалюты, майнинг, программирование

Автозаполнение пользовательского интерфейса React JS Material: изменить параметры

Я хочу использовать поле автозаполнения для своего проекта React JS. Для дизайна UI я использую Material UI. В документации вы можете увидеть следующий пример:

<Autocomplete
                    required
                    id="combo-box-demo"
                    filterOptions={(x) => x}
                    value={this.state.departure}
                    options={top100Films}
                    getOptionLabel={(option) => option.title}
                    renderInput={(params) => <TextField {...params} label="Startpunkt" variant="outlined" />}
                />

Объекты параметров имеют следующие значения по умолчанию:

let top100Films = [
        { title: 'The Shawshank Redemption', year: 1994 },
        { title: 'Monty Python and the Holy Grail', year: 1975 },
    ];

Для моей цели я хочу динамически изменять параметры, поскольку я использую Rest API, где я получаю результаты для ввода. Поэтому у меня вопрос, как я могу динамически изменять параметры, когда пользователь печатает.


  • Вы хотите получить результаты из API? Или вы хотите добавить фильтр к ранее полученным результатам? когда пользователь печатает. 23.04.2020
  • @joyson Я хочу получить результаты из API. Когда пользователь печатает, я хочу получить новые результаты в параметрах. 23.04.2020
  • Вы нашли какое-нибудь решение? Я тоже ищу то же самое 24.05.2020

Ответы:


1

Вы можете проверить этот пример:

import fetch from 'cross-fetch';
import React from 'react';
import TextField from '@material-ui/core/TextField';
import Autocomplete from '@material-ui/lab/Autocomplete';
import CircularProgress from '@material-ui/core/CircularProgress';

function sleep(delay = 0) {
  return new Promise((resolve) => {
    setTimeout(resolve, delay);
  });
}

export default function Asynchronous() {
  const [open, setOpen] = React.useState(false);
  const [options, setOptions] = React.useState([]);
  const loading = open && options.length === 0;

  React.useEffect(() => {
    let active = true;

    if (!loading) {
      return undefined;
    }

    (async () => {
      const response = await fetch('https://country.register.gov.uk/records.json?page-size=5000');
      await sleep(1e3); // For demo purposes.
      const countries = await response.json();

      if (active) {
        setOptions(Object.keys(countries).map((key) => countries[key].item[0]));
      }
    })();

    return () => {
      active = false;
    };
  }, [loading]);

  React.useEffect(() => {
    if (!open) {
      setOptions([]);
    }
  }, [open]);

  return (
    <Autocomplete
      id="asynchronous-demo"
      style={{ width: 300 }}
      open={open}
      onOpen={() => {
        setOpen(true);
      }}
      onClose={() => {
        setOpen(false);
      }}
      getOptionSelected={(option, value) => option.name === value.name}
      getOptionLabel={(option) => option.name}
      options={options}
      loading={loading}
      renderInput={(params) => (
        <TextField
          {...params}
          label="Asynchronous"
          variant="outlined"
          InputProps={{
            ...params.InputProps,
            endAdornment: (
              <React.Fragment>
                {loading ? <CircularProgress color="inherit" size={20} /> : null}
                {params.InputProps.endAdornment}
              </React.Fragment>
            ),
          }}
        />
      )}
    />
  );
}

Источник

23.04.2020
  • Это не извлекает данные при вводе, это только один вызов api для получения всех опций сразу, это не то, что было запрошено 27.07.2020

  • 2

    Вы можете использовать опору onInputChange в своем случае:

          <Autocomplete
                required
                id='combo-box-demo'
                filterOptions={(x) => x}
                value={this.state.departure}
                options={top100Films}
                getOptionLabel={(option) => option.title}
                onInputChange={(event: object, value: string, reason: string) => {
                  if (reason === 'input') {
                    changeOptionBaseOnValue(value);
                  }
                }}
                renderInput={(params) => (
                  <TextField {...params} label='Startpunkt' variant='outlined' />
                )}
              />
    

    Затем вы можете определить changeOptionBaseOnValue для обработки ваших параметров.

    16.09.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..