【发布时间】:2022-01-17 15:09:35
【问题描述】:
有没有办法从 React.createElement 获取基本的 DOM 元素?
就像我正在尝试为对话中的每个参与者创建一个 React 音频元素列表,我需要将轨道附加到一个元素,但它不适用于反应元素...
我的想法是这样的,但这行不通
const ref = useRef<HTMLAudioElement>()
const addAudioTrack = (track: AudioTrack) => {
const audio = React.createElement("audio", {key: track.name, ref: ref})
console.log(ref.current)
track.attach(ref.current)
setAudioTracks((prevTracks: any) => [...prevTracks, audio])
}
编辑:无法完全提供可重现的示例,因为对于“跟踪”,您需要 Twilio,但您可以尝试以下方法...我只是想知道是否有可能从 ReactElement 获取 react DOM 元素,否则我需要使用另一种方法
import React, {useRef, useState} from "react";
const NewTest = () => {
const [audioTracks, setAudioTracks] = useState<any>([])
const ref = useRef<HTMLAudioElement>()
const addAudioTrack = (track: any) => {
const audio = React.createElement("audio", {key: track.name, ref: ref})
console.log(ref.current)
if(ref.current) console.log("it is working")
// track.attach(ref.current)
setAudioTracks((prevTracks: any) => [...prevTracks, audio])
}
return (
<div>
<button onClick={() => {
addAudioTrack({name: `audioTrack-${(((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)}`})
}}>
AddTrack
</button>
{audioTracks && audioTracks.map((audio: any) => {
return <div key={audio.key} style={{width: 50, height: 50, backgroundColor: "red"}}>{audio} {audio.key}</div>
})}
</div>
)
}
export default NewTest
【问题讨论】:
-
请分享可重现的例子
-
请贴出使用该功能的组件
标签: javascript reactjs typescript twilio