Изменить метод обработчика для автозаполнения с флажком в пользовательском интерфейсе материала React JS

Я хочу реализовать поле, используя <AutoComplete /> в своей форме. Я получаю options от get запроса. И вот результат, когда я печатаю их в консоли.

[
    {
        "uid": "c34bb0ed-9f63-4803-8639-a42c7e2a8fb0",
        "tag_name": "Food"
    },
    {
        "uid": "346ab2da-e71d-4449-822e-e4836caa7076",
        "tag_name": "Religion"
    },
    {
        "uid": "9b4a9fd5-28fd-4690-8b00-a22c08a7c076",
        "tag_name": "Culture"
    },
    {
        "uid": "7889048e-03d7-4637-9fee-b22f8e7368dd",
        "tag_name": "Nature"
    },
    {
        "uid": "b3809713-b1bc-4676-beec-7637f4ae9183",
        "tag_name": "Native people"
    },
    {
        "uid": "1d84d7a2-13f4-43cd-9b8c-666a68d269d6",
        "tag_name": "My Host"
    }
]

Но после того, как я нажму на любой из флажков, элемент исчезнет из списка выбора.

А еще когда я вижу логи, мне кажется, что метод onChange работает некорректно, а в списке selectedTags не выставлено первое проверенное значение.

Вот мой код для загрузки тегов:

 const [tags, setTags] = useState([]);
const loadTags = async () => {
        axios({
            method: "get",
            url: "http://127.0.0.1:8000/api/v1/blog/tags/",
            headers: {
                'Content-Type': 'application/json',
            }
        }).then((result) => {
            setTags(result.data.data);
            console.info("********** The Tags are ******** ", tags);
        }).catch((error) => {
            toast.error("Something went wrong while fetching tags.")
        })
    }

    useEffect(() => {
        loadTags();
    }, []);

Вот мой код для поля AutoComplete:

const handleTagSelection = (value) => {
        console.info("********** The value is: ***********", value);
        setSelectedTags(value);
        console.info("++++++++ The selected tags are: ++++++++", selectedTags);
    }
<Autocomplete
    clearIcon = {false}
    multiple
    id = "tags-outlined"
    isOptionEqualToValue = {(option, value) => option.tag_name === value.tag_name}
    options = {tags}
    getOptionLabel = {(option) => option.tag_name}
    filterSelectedOptions
    sx = {{ width: "50rem" }}
    size = "small"
    disableCloseOnSelect
    value = {selectedTags}
    noOptionsText = "No related tag is available"
    onChange = {(e, value) => {
        if (value) {
            handleTagSelection(value);
        } else {
            return;
        }
    }}
    renderOption = {(props, option, { selected }) => (
        <li {...props}>
            <Checkbox
            icon = {icon}
            checkedIcon = {checkedIcon}
            style = {{ marginRight: 8 }}
            checked = {
                selected
            }
            />
            {option.tag_name}
        </li>
        )}
        style = {{ width: 500 }}
        renderInput = {(params) => (
            <TextField {...params} label = "Tags"  />
        )}
/>

Буду признателен за вашу помощь.

Поведение ключевого слова "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
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Может помочь удаление атрибута filterSelectedOptions из компонента Autocomplete.

Ссылка: Autocomplete API props

Спасибо. Теперь флажок установлен правильно, но обработчик onChange по-прежнему не работает и имеет ту же проблему. И значение неправильно сохраняется в selectedTags.

Aylin Naebzadeh 06.04.2023 11:48

Обработчик @NarimanMasjedi onChange работает. Причина, по которой вы видите неправильное значение, заключается в следующем: когда вы вызываете setSelectedTags, React не сразу обновляет значение selectedTags, а вместо этого отправляет обновление в очередь обновлений React для последующей обработки. Поэтому, когда вы регистрируетесь selectedTags внутри console.info, вы видите значение до обновления. Вы можете использовать useEffect для журнала консоли всякий раз, когда selectedTags обновляется, это даст вам правильный ответ.

Lynn C. 06.04.2023 17:28

@NarimanMasjedi Вы можете проверить этот связанный ответ .

Lynn C. 06.04.2023 17:31

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