#reactjs #react-native #react-hooks #use-ref #react-forwardref
Вопрос:
Я просто пытаюсь понять, как использовать это свойство.
В мой основной файл я добавил эти:
import Audio from "../../../src/Audio";
const audioRef = useRef(null);
useEffect(()=> {
audioRef.current.play();
}, [])
при возврате:
<View>
<Audio ref={audioRef} />
</View>
И вот Audio.js
import React from "react";
import Song from "./components/song/song.mp3";
const Audio = React.forwardRef((props,ref) => {
return(
<audio src={Song} ref={ref}></audio>
)
})
export default Audio;
вот в чем ошибка,
Комментарии:
1. Пользовательский интерфейс должен быть отрисован один раз, чтобы ссылка React имела подключенный HTMLDOMNode для доступа.
2. Итак, что это значит, сэр, что я должен сделать, чтобы это исправить?
Ответ №1:
Это означает, что вам нужен дополнительный цикл рендеринга, прежде чем ссылка будет определена и присоединена к DOMNode для вызова play
функции. Вы можете добавить состояние «initialRender» и запустить эффект при втором рендеринге.
const audioRef = useRef(null);
const [initialRender, setInitialRender] = useState(true);
useEffect(() => {
setInitialRender(false);
}, []);
useEffect(()=> {
if (!initialRender) {
audioRef.current.play();
}
}, [initialRender]);
Комментарии:
1. Спасибо за попытку помочь, но все равно выдает ту же ошибку.
2. Я предполагаю, что react-native не поддерживает сам «звук», он выдает эту ошибку
3. Ах да, вы в React-Native. Да, похоже, вам нужен сторонний пакет для добавления звука в проект RN. реагирующий-родной-звук кажется популярным.
4. Возможно, вам все равно потребуется отправить ссылку, если вы пытаетесь запустить аудиофайл из родительского компонента, и в этом случае вам может потребоваться взглянуть на крючок реакции useImperativeHandle.
Ответ №2:
Вы должны получить сообщение об ошибке, так как вы можете нарушить правила для компонента react.
как и в аудиокомпоненте, вы используете другой компонент, который начинается со звука, который начинается с малого регистра, так как вам следует использовать имя компонента, начинающееся с заглавной буквы.
Взгляните на код ошибки.
const Audio = React.forwardRef((props,ref) => {
return(
// error is here component name must starts with a capital letter
<audio src={Song} ref={ref}></audio>
)
})
Комментарии:
1. Да, но если я запишу его как аудио, он все равно выдаст ошибку. Я думаю, это потому, что react-native не поддерживает аудиокомпонент, поэтому, если я хочу его использовать, мне придется импортировать стороннюю программу. Спасибо, что ответили
2. Да, в react-native нет встроенного компонента, доступного для аудио, вам придется установить стороннюю библиотеку или вам придется создать свой собственный собственный аудиомодуль.