Выражения внутри свойства 'source' компонента <Image> в React Native

В React Native я могу

<Image
  source = {
    require(<image uri>)
  }
/>

и я могу использовать тернарный оператор вот так

<Image
  source = {
    true ? require(<image uri>) : require(<other image uri>)
  }
/>

но я не могу, например, это сделать

<Image
  source = {
    if (true) {
      require(<image uri>)
    }
  }
/>

Фактически, мой редактор кода (VsCode) затеняет «истинное» ключевое слово. Понятно, что я не могу использовать подобные выражения в поле «источник», но может ли кто-нибудь дать мне объяснение, какое именно правило здесь? Неужели это так просто? Или вы можете указать мне на какие-либо ресурсы, которые углубляются в спецификацию по этому поводу?

Фактически вы можете использовать выражения, но if () ... не является выражением. JSX не поддерживает операторы и тому подобное, но вы можете сделать все это в методе render() перед возвратом JSX. (чтобы было ясно: выражение - это все, что оценивается в один int / object / text / и т. д.)

Chris G 14.01.2019 19:04

@ChrisG благодарит вас за быстрый ответ и за разъяснение разницы между выражениями и утверждениями. Чтобы было ясно, это просто JSX вообще нигде не поддерживает операторы? И «if () ...» - это оператор, тогда как «x? Y: z» - это выражение, которое JSX поддерживает, верно?

gkeenley 14.01.2019 19:14

@gkeenley, это вроде правильно, но не только для JSX. Оператор (которому всегда предшествует ключевое слово, например if, return, try, switch и т. д.) Никогда не может использоваться там, где ожидается значение. Например, x ? return y: return z недействителен, потому что return - это оператор, а тернарный оператор ожидает значение. Другой пример - function(if (x){ val1 } else { val2 } ). Поскольку оператор функции ожидает значение, это недопустимо. Поскольку скобки JSX ожидают значения, они принимают только выражения, но не операторы. Надеюсь, это поможет прояснить это!

Robbie Milejczak 14.01.2019 20:20
Поведение ключевого слова "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
3
111
1

Ответы 1

Попробуй это:

var bShow = true or false
<Image
  source = {
    true && require(<image uri>)
  }
/>

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