Saya masih cukup baru di React, tetapi saya telah bekerja dengan lambat dan saya menemukan sesuatu yang membuat saya terjebak.
Saya mencoba membuat komponen "pengatur waktu" di React, dan sejujurnya saya tidak tahu apakah saya melakukan ini dengan benar (atau efisien). Dalam kode saya di bawah ini, saya mengatur negara untuk mengembalikan objek { currentCount: 10 }
dan telah mempermainkan dengan componentDidMount
, componentWillUnmount
, dan render
dan saya hanya bisa mendapatkan negara untuk "count down" 10-9.
Pertanyaan dua bagian: Apa yang salah? Dan, apakah ada cara yang lebih efisien untuk menggunakan setTimeout (daripada menggunakan componentDidMount
& componentWillUnmount
)?
Terima kasih sebelumnya.
import React from 'react';
var Clock = React.createClass({
getInitialState: function() {
return { currentCount: 10 };
},
componentDidMount: function() {
this.countdown = setInterval(this.timer, 1000);
},
componentWillUnmount: function() {
clearInterval(this.countdown);
},
timer: function() {
this.setState({ currentCount: 10 });
},
render: function() {
var displayCount = this.state.currentCount--;
return (
<section>
{displayCount}
</section>
);
}
});
module.exports = Clock;
bind(this)
tidak lagi diperlukan, bereaksi melakukan ini sendiri sekarang.this.timer.bind(this)
karena ini. Pengatur waktu itu sendiri tidak berfungsiclass Clock extends Component
tidak mengikat otomatis. Jadi itu tergantung pada bagaimana Anda membuat komponen apakah Anda perlu mengikat.Jawaban:
Saya melihat 4 masalah dengan kode Anda:
setState
metode untuk benar-benar mengubah keadaanMari coba perbaiki itu:
Ini akan menghasilkan pengatur waktu yang berkurang dari 10 ke -N. Jika Anda menginginkan timer yang berkurang menjadi 0, Anda dapat menggunakan versi yang sedikit dimodifikasi:
sumber
componentDidMount
adalah tempat yang tepat untuk memicu peristiwa sisi klien, jadi saya akan menggunakannya untuk memulai hitungan mundur. Metode lain apa yang Anda pikirkan untuk memulai?Memperbarui hitungan mundur 10 detik menggunakan
class Clock extends Component
sumber
Memperbarui hitungan mundur 10 detik menggunakan Hooks (proposal fitur baru yang memungkinkan Anda menggunakan status dan fitur React lainnya tanpa menulis kelas. Saat ini mereka ada di React v16.7.0-alpha).
sumber
Terima kasih @dotnetom, @ greg-herbowicz
Jika mengembalikan "this.state is undefined" - mengikat fungsi timer:
sumber
Jika ada yang mencari pendekatan React Hook untuk mengimplementasikan setInterval. Dan Abramov membicarakannya di blognya . Lihat jika Anda ingin membaca dengan baik tentang subjek termasuk pendekatan Kelas. Pada dasarnya kode ini adalah Hook khusus yang mengubah setInterval sebagai deklaratif.
Juga memposting tautan CodeSandbox untuk kenyamanan: https://codesandbox.io/s/105x531vkq
sumber
Memperbarui status setiap detik di kelas react. Perhatikan bahwa index.js saya melewati fungsi yang mengembalikan waktu saat ini.
sumber