Условный объект как значение массива

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

Каков правильный способ добиться этого? Я пытался использовать оператор распространения (согласно этому Отвечать, но я продолжаю получать сообщение об ошибке

TypeError: Invalid attempt to spread non-iterable instance

Что я делаю неправильно?

Мой код:

<Dropdown
    type = "link"
    itemsObject = {
       [...states.all.map(state => ({
           value: state.name,
           onClick: () => {
               this.updateCandidate(candidate, {state_id: state.id})
           }
        })),
        {
            isDivider: true
        },
        {
            value: "Notities bewerken",
            onClick: () => {
                this.openCandidateModel(candidate)
            }
        },
        ...(candidate.state.id === 2 ? [{
                value: "Afspraak beheren",
                onClick: () => {
                    this.openCandidateModel(candidate)
                }
           }] : undefined)
    ]}
/>

ну, я думаю, если ваш тернарный оператор приводит к undefined, он не может распространяться. Попробуйте заключить undefined в скобки: [undefined] или вместо этого используйте [].

Nick Parsons 04.02.2019 13:59
Поведение ключевого слова "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
1
85
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Вы пытаетесь распространять undefined, когда candidate.state.id !== 2. Измените его на:

...(candidate.state.id === 2 ? [{
                value: "Afspraak beheren",
                onClick: () => {
                    this.openCandidateModel(candidate)
                }
           }] : [])

Кроме того, вероятно, стоит упомянуть, что {...undefined} действителен, а [...undefined] — нет: Распространение неопределенного в массиве против объекта

Вы не можете распространять undefined, но можете распространять пустой массив:

 [...undefined] // doesnt work
 [...[]] // works

Вы пытаетесь распространить undefined, что вызывает ошибку. Использовать ? [{}] : []

   ...(candidate.state.id === 2 ? [{
            value: "Afspraak beheren",
            onClick: () => {
                this.openCandidateModel(candidate)
            }
       }] : undefined)

Я считаю, что проблема должна быть в этой части, поскольку вы не можете распространять undefined, вместо этого вы можете использовать пустой массив [ ].

Спасибо!

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