React hook, ComponentDidMount [duplikat]
Dalam dokumen resmi video.js https://docs.videojs.com/tutorial-react.html
kita punya
componentDidMount() {
// instantiate Video.js
this.player = videojs(this.videoNode, this.props, function onPlayerReady() {
console.log('onPlayerReady', this)
});
}
Saya ingin membuat komponen fungsional dengan kait
export default function VideoPlayer(props) {
const player = useRef(null);
const videoNode = useRef(null);
useEffect(() => {
player.current = videojs(videoNode.current, props);
return () => {
if (player.current) {
player.current.dispose()
}
}
}, []);//I have problem with dependency array
return (
<div data-vjs-player>
<video ref={videoNode} className="video-js"/>
</div>
)
}
Saya punya peringatan
ESLint: React Hook useEffect memiliki ketergantungan yang hilang: 'props'. Sertakan atau hapus array dependensi. (React-hooks / exhaustive-deps)
Jika saya mengubah array ketergantungan dari []
menjadi [props]
useEffect
berjalan pada setiap render, saya hanya ingin menjalankannya pertama kali, seperticomponentDidMount
Bagaimana saya bisa membuat componentDidMount
dengan tepat menggunakan kait?
Jawaban
Seperti yang dijelaskan di sini , Anda digunakan useEffect
sebagaimana mestinya. Sebuah array dependensi kosong berarti itu akan berjalan hanya sekali (sebagai componentDidMount
). Kesalahan yang ditunjukkan memberi tahu Anda jika Anda benar-benar memiliki niat lain, efeknya tidak akan ditampilkan lagi.
Untuk menghilangkan kesalahan, Anda cukup menempelkan komentar berikut // eslint-disable-line react-hooks/exhaustive-deps
di akhiruseEffect
useEffect(() => {
player.current = videojs(videoNode.current, props);
return () => {
if (player.current) {
player.current.dispose()
}
}
}, []); // eslint-disable-line react-hooks/exhaustive-deps
REFERENSI
Jawaban ini menjelaskannya dengan lebih teliti