#reactjs
#reactjs
Вопрос:
Я новичок в reactjs, в этом я определил компоненты, и я передаю заголовок аудиокартам, и с помощью title я также определяю источник аудиофайлов. и после нажатия на этот конкретный компонент я хочу воспроизвести этот конкретный аудиофайл. в js мы можем добиться этого, используя $(this).find();
но в reactjs, как это сделать, кто-нибудь может мне помочь
import React from 'react';
import AudioCard from './AudioCard';
import '../css/RecommendedAudios.css';
function RecommandedAudios() {
return (
<div className="recommandedaudios">
<h2>Recommanded</h2>
<div className="recommandedaudios_audios">
<AudioCard title="Arrows to Athens - Alive" />
<AudioCard title="Arrows to Athens - Dust amp; Gold" />
<AudioCard title="Arrows to Athens - Stars" />
<AudioCard title="Arrows to Athens - Used to be" />
<AudioCard title="Bryan Adams - Here I am" />
<AudioCard title="My Heart Belongs to You" />
<AudioCard title="Ravenscode - My Escape" />
</div>
</div>
);
}
export default RecommandedAudios;
import React from 'react';
import '../css/AudioCard.css';
import PlayArrowIcon from '@material-ui/icons/PlayArrow';
function AudioCard({ title, timestamp }) {
var playsong = () => {
const select = document.querySelector("audio");
select.play();
};
return (
<div onClick={playsong} className="audiocard">
<PlayArrowIcon />
<div className="audiocard_info">
<div className="audiocard_title">
<h5>{title}</h5>
<audio src={require(`../sounds/${title}.mp3`)}></audio>
</div>
</div>
</div>
);
}
export default AudioCard;
Комментарии:
1. документ. querySelector («audio») вернет первый тег «audio» в HTML, а не тот, который вы ищете, я предлагаю добавить идентификатор извне
2. да, я знаю, что в js я бы использовал $(this). querySelector(«audio); но это не работает в react js, есть ли альтернатива тому же в reactjs
3. да, вы можете использовать ссылку, reactjs.org/docs/refs-and-the-dom.html
4. вызов функции воспроизведения, как
onClick={ ()=> playsong()}
5. @NitishKurhadkar добавил ответ с использованием ссылки, проверьте это
Ответ №1:
документ.querySelector («audio») вернет первый тег «audio» в HTML, а не тот, который вы ищете
вы можете использовать ссылку:
import React, { useRef } from 'react'
function AudioCard({ title, timestamp }) {
const audioEl = useRef(null);
const playsong = () => audioEl.current.play();
return (
<div onClick={playsong} className="audiocard">
<PlayArrowIcon />
<div className="audiocard_info">
<div className="audiocard_title">
<h5>{title}</h5>
<audio ref={audioEl} src={require(`../sounds/${title}.mp3`)}></audio>
</div>
</div>
</div>
);
}
Ответ №2:
Вы можете использовать react-audio-player
вместо использования query selector
и HTML аудио тега, вы можете установить его с помощью
npm install --save react-audio-player
и импортируйте библиотеку в свой код и используйте
import ReactAudioPlayer from 'react-audio-player';
const [audio,ReferAudio] = useState()
...........
<div onClick={playsong} className="audiocard">
<PlayArrowIcon />
<div className="audiocard_info">
<div className="audiocard_title">
<h5>{title}</h5>
<ReactAudioPlayer
src={require(`../sounds/${title}.mp3`)}
controls
ref={(e) => { ReferAudio(e) }}
/>
</div>
</div>
</div>
вы можете получить доступ к проигрывателю, используя audio
вы можете узнать больше здесь
Комментарии:
1. использование react-audio-player необязательно. для доступа к элементу html можно использовать useRef()
2. @NitishKurhadkar если это сработало, сделайте его решаемым, чтобы другие с аналогичной проблемой также могли решить свою проблему