### React 中的 Reference
Reference 是在 React 中很常會使用到的一種方法,用處是可以把引入的 HTML DOM 物件回傳出來。使用時我們會用以下的語法 :
```js
class DemoComponent extends React.Component {
constrcutor(props) {
// create reference object
this.divRef = React.createRef();
// init state
this.state = {];
}
componentDidMount() {
// print <div> in console
console.log(this.divRef.current);
}
render() {
return (<div ref={ this.divRef }>hello world</div>);
}
}
```
當 Render 事件完成後,DOM 的物件便可以通過我們建立的 Reference 取得。然後你可以直接對物件進行 DOM 的操作。
### 只有 DOM 物件才能加入 ref
要注意的是,只有 DOM 物件才可以進行 `ref` 的操作,對於非 DOM 物件加入 `ref` 會有機會產生錯誤。
```js
// parent object render function
render() {
return (<DemoComponent ref={this.componentRef} />);
}
```
這樣是會炒車的 !
### 提取自訂物件的 DOM ref
如果想要在自訂的 React Component 取得內裏的 DOM Reference,我們可以使用以下的 Pattern 去解決 (唔知叫什麼名稱)。
```js
// add code to component did update
componentDidUpdate() {
// assign props
var props = this.props;
// check has onRef event listener
typeof props.onRef === 'function' && props.onRef(this.divRef);
}
```
然後在 parent component 使用 component 時加入 `onRef` 事件 :
```js
// on child component return ref
onDemoComponentRef(ref) {
this.divRef = ref;
}
// parent object render function
render() {
return (<DemoComponent onRef={ ref => this.onDemoComponentRef(ref) } />);
}
```
這樣便可以有系統地取得自訂 Component 的 Reference。