#javascript #reactjs #material-ui
#javascript #reactjs #материал-пользовательский интерфейс
Вопрос:
Я работаю с MUI «множественный выбор» / «множественный выбор флажков».
Моя цель -> Открыть модальное значение, установить некоторое начальное значение, а затем иметь полный контроль над выбором.
Мои проблемы -> В настоящее время начальные элементы могут быть выбраны повторно, и после их выбора их нельзя отменить.
Вот изолированная среда кода, созданная из-за проблемы MUI, связанной с этой проблемой MUI
На данный момент ->Я включил 3 набора состояний в изолированную среду
newOptions is equal to [options[1]]
1 - value: [options[1]] -> Success
2 - value: options.slice(0,1) -> Success
3 - value: newOptions -> Failure
Отключив комментарии к различным состояниям, вы можете увидеть описанное поведение, и элементы не будут удалены из режима множественного выбора.
Мне интересно, может ли кто-нибудь описать это поведение и его решение => хотя я смог добиться некоторого успеха (используя [options[x]]), однако это не поддерживает то, что я делаю в своем проекте.
Ответ №1:
Как указано в https://github.com/mui-org/material-ui/issues/16775 , Вы можете как бы исправить это, используя ссылку на объект в качестве значения по умолчанию, например https://codesandbox.io/s/create-react-app-vgyz6
Я думаю, что при использовании ссылки на объект компонент выбора по умолчанию использует проверку равенства ссылок, поэтому отмена выбора работает.
Когда вы используете третий способ, «3 — value: newOptions -> Сбой», в Javascript даже свойства и значения 2 объектов идентичны, но сами объекты не считаются равными.
var jangoFett = {
occupation: "Bounty Hunter",
genetics: "superb"
};
var bobaFett = {
occupation: "Bounty Hunter",
genetics: "superb"
};
// Outputs: false
console.log(bobaFett === jangoFett);
Комментарии:
1. Спасибо за ваш ответ, я думаю о том, как использовать это в будущем -> Я хочу сделать что-то вроде ` useEffect(() => { setState({value:arrayOfObjects})}, []) `, если я пытаюсь использовать select в качестве контролируемого компонента,Я не уверен, как я могу передать информацию в виде ссылки, как у вас, в мой useState. Хотя я адаптировал эту изолированную среду кода, я все еще не совсем уверен, как использовать это «динамически», по сути, используя то, что есть в изолированной среде, однако параметры будут с сервера
2. Я добавил пример для использования ссылки на object. codesandbox.io/s/create-react-app-forked-j6xyr
3. Извините, я не вижу разницы между связанной вами песочницей и той, которую я изначально опубликовал. Не могли бы вы дать мне номер строки, о котором вы говорите? Спасибо
4. ОК. Предположим, что ваш список параметров получен с сервера, и вы используете setState в useEffect, мы все равно можем называть его переменными options . Тогда у вас может быть список выбранных элементов, и мы назовем его selectedOptions . Ключ в том, что вам нужно заполнить selectedOptions, связав каждый выбранный элемент с соответствующим в переменных options . codesandbox.io/s/create-react-app-forked-jbqbr