前提知識
本題
PureComponent にインラインのアロー関数を渡してもいい場合がある。これだ。
class MyContainerComponent extends Component {
render() {
return <MyPureComponent ref={(ref) => (this.myPureElement = ref)} />
}
}
こんな例,至るところで見るのでずっと疑問だったけど,冷静に考えてみて今日気づいた。
ref は prop じゃない。
どうやらこいつ, key に並ぶ特殊属性らしい。
- Warning:
refis not a prop · Issue #2181 · JedWatson/react-select - Warning: Element:
keyis not a prop · Issue #518 · facebook/react-devtools
つまり props オブジェクトの中に入らなければ shallowEquals の比較に何も影響は出ないので,堂々とアロー関数書いちゃってOKなのである。
今までこんな無駄なコードを書いていた・・・↓
class MyContainerComponent extends Component {
assignMyPureElement = (ref) => (this.myPureElement = ref)
render() {
return <MyPureComponent ref={this.assignMyPureElement} />
}
}