export function/method from react 使用效果/hook
Export function/method from react use effect / hook
我的一个项目中有这个 wavesurfer 实例。
这会动态显示各种音频文件。
我在我想要播放和暂停按钮触发 wave surfer 的页面上呈现它。
我不太明白如何传递这些功能?
它们已在代码中标记。
在此先致谢!
export default function FiddleDisplay({ audioFileUrl }) {
const waveformRef = React.useRef();
React.useEffect(() => {
if (waveformRef.current) {
const activeWaveColor = '#f5f5f5';
const playedWaveColor = '#707070';
const wavesurfer = WaveSurfer.create({
container: waveformRef.current,
barWidth: 5,
cursorWidth: 2,
waveColor: activeWaveColor,
progressColor: playedWaveColor,
hideScrollbar: true,
autoCenter: false,
responsive: true,
width: 100,
barHeight: 9,
height: 350,
interact: true,
maxCanvasWidth: 2000,
fillParent: true
});
wavesurfer.load(`${audioFileUrl}`);
wavesurfer.play(); //USE THIS IN OTHER COMPONENT
wavesurfer.pause(); //USE THIS IN OTHER COMPONENT
}
}, []);
return (
<>
<Waveform ref={waveformRef} />
</>
);
}
您需要使用 useState 存储对实例的引用,并将相关的绑定方法附加到按钮:
export default function FiddleDisplay({
audioFileUrl,
}) {
const waveformRef = React.useRef();
const [waveSurfer, setWaveSurfer] = React.useState();
React.useEffect(() => {
if (waveformRef.current) {
const activeWaveColor = '#f5f5f5';
const playedWaveColor = '#707070';
const wavesurfer = WaveSurfer.create({
container: waveformRef.current,
barWidth: 5,
cursorWidth: 2,
waveColor: activeWaveColor,
progressColor: playedWaveColor,
hideScrollbar: true,
autoCenter: false,
responsive: true,
width: 100,
barHeight: 9,
height: 350,
interact: true,
maxCanvasWidth: 2000,
fillParent: true
});
wavesurfer.load(`${audioFileUrl}`);
setWaveSurfer(wavesurfer);
}
}, []);
const play = waveSurfer && waveSurfer.play.bind(waveSurfer);
const pause = waveSurfer && waveSurfer.pause.bind(waveSurfer);
return (
<>
<Waveform ref={waveformRef} />
<Button onClick={play}>Play</Button>
<Button onClick={pause}>Pause</Button>
</>
);
}
如果您想在其他地方呈现按钮,您需要从父函数传入 setter 并将绑定的方法传回去。
我的一个项目中有这个 wavesurfer 实例。 这会动态显示各种音频文件。 我在我想要播放和暂停按钮触发 wave surfer 的页面上呈现它。
我不太明白如何传递这些功能?
它们已在代码中标记。
在此先致谢!
export default function FiddleDisplay({ audioFileUrl }) {
const waveformRef = React.useRef();
React.useEffect(() => {
if (waveformRef.current) {
const activeWaveColor = '#f5f5f5';
const playedWaveColor = '#707070';
const wavesurfer = WaveSurfer.create({
container: waveformRef.current,
barWidth: 5,
cursorWidth: 2,
waveColor: activeWaveColor,
progressColor: playedWaveColor,
hideScrollbar: true,
autoCenter: false,
responsive: true,
width: 100,
barHeight: 9,
height: 350,
interact: true,
maxCanvasWidth: 2000,
fillParent: true
});
wavesurfer.load(`${audioFileUrl}`);
wavesurfer.play(); //USE THIS IN OTHER COMPONENT
wavesurfer.pause(); //USE THIS IN OTHER COMPONENT
}
}, []);
return (
<>
<Waveform ref={waveformRef} />
</>
);
}
您需要使用 useState 存储对实例的引用,并将相关的绑定方法附加到按钮:
export default function FiddleDisplay({
audioFileUrl,
}) {
const waveformRef = React.useRef();
const [waveSurfer, setWaveSurfer] = React.useState();
React.useEffect(() => {
if (waveformRef.current) {
const activeWaveColor = '#f5f5f5';
const playedWaveColor = '#707070';
const wavesurfer = WaveSurfer.create({
container: waveformRef.current,
barWidth: 5,
cursorWidth: 2,
waveColor: activeWaveColor,
progressColor: playedWaveColor,
hideScrollbar: true,
autoCenter: false,
responsive: true,
width: 100,
barHeight: 9,
height: 350,
interact: true,
maxCanvasWidth: 2000,
fillParent: true
});
wavesurfer.load(`${audioFileUrl}`);
setWaveSurfer(wavesurfer);
}
}, []);
const play = waveSurfer && waveSurfer.play.bind(waveSurfer);
const pause = waveSurfer && waveSurfer.pause.bind(waveSurfer);
return (
<>
<Waveform ref={waveformRef} />
<Button onClick={play}>Play</Button>
<Button onClick={pause}>Pause</Button>
</>
);
}
如果您想在其他地方呈现按钮,您需要从父函数传入 setter 并将绑定的方法传回去。