lifelong learner — urip iku urup, currently working on accenture.

React – ref

0
Degananda.com -

Ref adalah fungsi yang digunakan untuk memberikan nilai reference pada element. bagaimankah cara mendapatkan reference dari suatu elemen pada dom pada React ? Silakan simak ulasan berikut ini.

Selayang pandang

Mendapatkan references dari suatu elemen pada dom sangat bermanfaat. Misalnya untuk mereset nilai dari suatu input form ataupun melakukan perubahan pada attribute dari elemen tersebut. Kode yang digunakan untuk mendapatkan ref dari suatu elemen adalah

ReactDOMfindDomNode()

Fungsi reactDOM.findDomNode() diatas hanya dapat berjalan jika komponen yang menjadi “container” dari elemen tersebut telah dimounting ke dalam DOM. Sebelum komponen belum masuk (mounted) pada DOM fungsi diatas tidak dapat berjalan. Sehingga pastikan meletakannya sesuai dengan lifecyclenya.

Elemen yang dapat diambil nilai referencesnya haruslah diberikan tag “ref” dengan menuliskan attribute ref di syntaxnya. Ini artinnya tidak semua elemen dapat diambil nilai referencesnya melainkan harus kita register atau daftarkan terlebih dahulu. Contohnya misalkan kita memiliki form berikut ini

Form diatas merupakan multiple input yang dihandle dengan menggunakan controlled component.  Kode dari form diatas yakni

constructor(props){
 super(props);

// bind kedua handler agar dapat menggunakan this
 this.onSubmit = this.onSubmit.bind(this);
 this.handleChange = this.handleChange.bind(this);

this.state = {
 // form value boject
 name : '',
 alamat : ''
 }
}

handleChange(event){
 this.setState({
 [event.target.name] : event.target.value
 });
}

onSubmit(event){
 event.preventDefault();
 console.log(this.state);
}

render() {
 return (
<form onSubmit={this.onSubmit}>
 <p>
 <label> nama </label>
 <input type="text" value={this.state.name} name="name" onChange={this.handleChange} />
 </p>
 <p>
 <label> alamat </label>
 <input type="text" value={this.state.alamat} name="alamat" onChange={this.handleChange} />
 </p>
 <p>
 <input type="submit" value="submit" />
 </p>
</form>
 );
}

kita akan memanfaatkan ref untuk mereset input nama dan alamat setelah form tersebut disubmit oleh user.

Implementasi ref

Langkah 1 – mengimport modul ReactDOM

modul ReactDOM berasal dari package react-dom, pastikan pada kita mengimport modul tersebut pada class component.

import React , { Component } from 'react';
import ReactDOM from 'react-dom';

langkah 1 – registrasi elemen

hal pertama kali yang harus dilakukan adalah meregister elemen tersebut agar dapat ambil nilai referencesnya dari dom. Carannya yakni berikan attribute “ref” pada elemen-elemen tersebut dengan value berupa nama dari ref (string). Contohnya untuk kedua elemen diatas maka implementasinnya adalah sebagai berikut iin

<p>
 <label> nama </label>
 <input type="text" value={this.state.name} ref="refName" name="name" onChange={this.handleChange} />
</p>
<p>
 <label> alamat </label>
 <input type="text" value={this.state.alamat} ref="refAlamat" name="alamat" onChange={this.handleChange} />
</p>

langkah dua 2 – membuat fungsi untuk menreset value dari elemen

kita akan menaruhnya pada fungsi yang menghandle submit dari form tersebut.

onSubmit(event){
 event.preventDefault();
 console.log(this.state);
 // clear input
 ReactDOM.findDOMNode(this.refs.refAlamat).value = '';
 ReactDOM.findDOMNode(this.refs.refName).value = '';
}

fungsi value = ”, digunakan untuk mereset nilai dari input. Meski sebenarnya kita dapat meresetnya melalui beberapa cara lain. Misalnya state pada komponen yang kita ubah nilainya. Namun sekali lagi ini tergantung dari situasi dan kondisi.

Fungsi yang dapat kita gunakan pada ref ini layaknya pada javascript references pada suatu elemen. Misalnya value, focus, id dan lain sebagainnya. Kita dapat memanfaatkan references untuk mengakomodasi fungsi-fungsi element references pada javascript.

testing

saat form di berikan nilai.

saat form disubmit

nilai dari input akan direset menjadi ” (bukan null) sesuai dengan kode yang kita tuliskan. Berikut ini terdapat beberapa fungsi references yang biasannya digunakan

Fungsi element reference Keguanaan
elementRef.value() untuk memberikan value terhadap elemen tersebut.
elementRef.focus() untuk memfokuskan cursor pada element , biasannya digunakan ke input. Berkorelasi dengan css input:focus.
elementRef.blur()  untuk menghilangkan fokus cursor pada element , biasannya digunakan ke input. Berkorelasi dengan css input:focus.
elementRef.getAttribute() mendapatkan nilai dari attribute tertentu pada suatu element
elementRef.style()  memberikan nilai stylesheet(css) pada element (sangat berguna untuk theming aplikasi).

berikut ini adalah kode full dari penggunaan multiple input dengan controlled component dan implementasi reactDOM (references)

import React , { Component } from 'react';
import ReactDOM from 'react-dom';
import './App.css';

class App extends Component {
// tutorial
constructor(props){
 super(props);

// bind kedua handler agar dapat menggunakan this
 this.onSubmit = this.onSubmit.bind(this);
 this.handleChange = this.handleChange.bind(this);

this.state = {
 // form value boject
 name : '',
 alamat : ''
 }
}

handleChange(event){
 this.setState({
 [event.target.name] : event.target.value
 });
}



onSubmit(event){
 event.preventDefault();
 console.log(this.state);
 // clear input
 ReactDOM.findDOMNode(this.refs.refAlamat).value = '';
 ReactDOM.findDOMNode(this.refs.refName).value = '';
}

render() {
 return (
<form onSubmit={this.onSubmit}>
 <p>
 <label> nama </label>
 <input type="text" value={this.state.name} ref="refName" name="name" onChange={this.handleChange} />
 </p>
 <p>
 <label> alamat </label>
 <input type="text" value={this.state.alamat} ref="refAlamat" name="alamat" onChange={this.handleChange} />
 </p>
 <p>
 <input type="submit" onClick={this.onButtonClick} value="submit" />
 </p>
</form>
 );
}
// end tutorial
}

export default App;