useState()
adalah hook React. Hook memungkinkan untuk menggunakan status dan mutabilitas di dalam komponen fungsi.
Meskipun Anda tidak bisa menggunakan hook di dalam kelas, Anda bisa membungkus komponen kelas Anda dengan fungsi satu dan menggunakan hook darinya. Ini adalah alat yang hebat untuk memigrasi komponen dari kelas ke bentuk fungsi. Berikut contoh lengkapnya:
Untuk contoh ini saya akan menggunakan komponen penghitung. Ini dia:
class Hello extends React.Component {
constructor(props) {
super(props);
this.state = { count: props.count };
}
inc() {
this.setState(prev => ({count: prev.count+1}));
}
render() {
return <button onClick={() => this.inc()}>{this.state.count}</button>
}
}
ReactDOM.render(<Hello count={0}/>, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id='root'></div>
Ini adalah komponen kelas sederhana dengan status hitungan, dan pembaruan status dilakukan dengan metode. Ini adalah pola yang sangat umum pada komponen kelas. Hal pertama adalah membungkusnya dengan komponen fungsi dengan nama yang sama, yang mendelegasikan semua propertinya ke komponen yang dibungkus. Anda juga perlu merender komponen yang dibungkus dalam fungsi kembali. Ini dia:
function Hello(props) {
class Hello extends React.Component {
constructor(props) {
super(props);
this.state = { count: props.count };
}
inc() {
this.setState(prev => ({count: prev.count+1}));
}
render() {
return <button onClick={() => this.inc()}>{this.state.count}</button>
}
}
return <Hello {...props}/>
}
ReactDOM.render(<Hello count={0}/>, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id='root'></div>
Ini adalah komponen yang persis sama, dengan perilaku yang sama, nama yang sama, dan properti yang sama. Sekarang mari kita angkat status penghitungan ke komponen fungsi. Beginilah kelanjutannya:
function Hello(props) {
const [count, setCount] = React.useState(0);
class Hello extends React.Component {
constructor(props) {
super(props);
this.state = { count: props.count };
}
inc() {
this.setState(prev => ({count: prev.count+1}));
}
render() {
return <button onClick={() => setCount(count+1)}>{count}</button>
}
}
return <Hello {...props}/>
}
ReactDOM.render(<Hello count={0}/>, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.6/umd/react.production.min.js" integrity="sha256-3vo65ZXn5pfsCfGM5H55X+SmwJHBlyNHPwRmWAPgJnM=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.production.min.js" integrity="sha256-qVsF1ftL3vUq8RFOLwPnKimXOLo72xguDliIxeffHRc=" crossorigin="anonymous"></script>
<div id='root'></div>
Perhatikan bahwa metode inc
ini masih ada, tidak akan merugikan siapa pun, sebenarnya adalah kode mati. Ini idenya, teruslah angkat status. Setelah Anda selesai, Anda dapat menghapus komponen kelas:
function Hello(props) {
const [count, setCount] = React.useState(0);
return <button onClick={() => setCount(count+1)}>{count}</button>;
}
ReactDOM.render(<Hello count={0}/>, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.6/umd/react.production.min.js" integrity="sha256-3vo65ZXn5pfsCfGM5H55X+SmwJHBlyNHPwRmWAPgJnM=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.production.min.js" integrity="sha256-qVsF1ftL3vUq8RFOLwPnKimXOLo72xguDliIxeffHRc=" crossorigin="anonymous"></script>
<div id='root'></div>
Meskipun ini memungkinkan untuk menggunakan kait di dalam komponen kelas, saya tidak akan merekomendasikan Anda untuk melakukannya kecuali jika Anda bermigrasi seperti yang saya lakukan dalam contoh ini. Fungsi pencampuran dan komponen kelas akan membuat manajemen negara menjadi berantakan. saya harap ini membantu
Salam Hormat
useState
penerapannya. Berikut adalah definisi dari versi 16.9 .