#reactjs #typescript #switch-statement
#reactjs #typescript #оператор switch
Вопрос:
Кто-нибудь знает, что я здесь делаю не так. Я понимаю, что я не собираюсь использовать теги для ссылки на внешний веб-сайт за пределами оператора return, но просто хотел получить некоторые разъяснения о том, как я должен это настроить? Я также получаю предупреждение о случае сбоя в Switch. Любая помощь будет с благодарностью!
const StreamingButtons: React.FC<Props> = ({appleMusicUrl, spotifyUri}) => {
const handleExternalDownload = (service: StreamingType) => {
switch (service) {
case StreamingType.APPLEMUSIC: {
<a href={appleMusicUrl}></a>
}
case StreamingType.SPOTIFY : {
<a href={spotifyUri}></a>
}
default : {
console.log("do nothing")
}
}
}
return (
<div className='streamingButtons'>
<img
className="appleImg"
src='/images/streaming-transparent/apple-music.png'
onClick={() => handleExternalDownload(StreamingType.APPLEMUSIC)}
/>
<img
className='spotifyImg'
src='/images/streaming-transparent/spotify-green.svg'
onClick={() => handleExternalDownload(StreamingType.SPOTIFY)}
/>
</div>
)
}
export default StreamingButtons
Комментарии:
1. Вам нужны
break
инструкции, вы получаете провал в своихcase
s.2. Кроме того, я не понимаю, что вы имеете в виду для выполнения с помощью JSX в
onClick
обработчике.
Ответ №1:
Вы не смотрите на return
a
тег. Он автоматически не вызывает поведение загрузки. Что вы действительно делаете, так это превращаете изображение в ссылку, которая ведет к определенному href
праву? Оберните каждый img
a
тегом и измените свою функцию, чтобы создать соответствующий href
const StreamingButtons: React.FC<Props> = ({ appleMusicUrl, spotifyUri }) => {
const getDownloadUrl = (service: StreamingType) => {
switch (service) {
case StreamingType.APPLEMUSIC: {
return appleMusicUrl
}
case StreamingType.SPOTIFY: {
return spotifyUri
}
default: {
const NO_BEHAVIOR = '\'
return NO_BEHAVIOR
}
}
return (
<div className='streamingButtons'>
<a href={getDownloadUrl(StreamingType.APPLEMUSIC)}>
<img
className="appleImg"
src='/images/streaming-transparent/apple-music.png'
/>
</a>
<a href={getDownloadUrl(StreamingType.SPOTIFY)}>
<img
className='spotifyImg'
src='/images/streaming-transparent/spotify-green.svg'
/>
</a>
</div>
)
}
}
Ответ №2:
Если вы хотите вернуть разметку, пожалуйста, попробуйте ниже, обратите внимание на скобки. В других тисках вы можете опубликовать ошибку
case StreamingType.APPLEMUSIC: (
<a href={appleMusicUrl}></a>
)