Reactアプリを開発していて便利だと思ったJavaScriptの記法から、特に使い勝手の良いものを6つ紹介してみます。
特にjsxでは記述量の少なさやシンプルさが読みやすさに直結すると思うので、意味が問題なく伝わる範囲でこのようなshorthandをなるべく活用していければと思っています。
これらの書き方が必ずしもベストというわけではなく、好みや開発環境や状況によって他の書き方のほうが良いケースもあると思います。
1. 三項演算子でif文を減らす
ネストさせることも可能。
before
render () {
const {name} = this.props
if (!name) {
return (
<Message value={'no name'} />
)
} else {
return (
<User name={name} />
)
}
}
after
render () {
const {name} = this.props
return name ? <User name={name} /> : <Message value={'no name'} />
}
2. && と || でnullチェックを減らす
null(falsy)チェックや、nullだったときに設定するデフォルト値に使えます。
before
const Name = (props) => {
const {user} = props
if (user) {
return (
<div>
{user.name}
</div>
)
} else {
return (
<div>
{'No User'}
</div>
)
}
}
after
const Name = (props) => {
const {user} = props
return (
<div>
{user && user.name || 'No User'}
</div>
)
}
3. map / filter / reduce を使ってfor文を減らす
for構文使う必要がほぼなくなりました。
map / filter / reduceの使い分けについては他の記事を参照してみてください。
before
let jpUsers = []
for (let i = 0; i < users.length; i ++) {
if (users[i].country === 'jp' ) {
jpUsers.push(users[i])
}
}
after
const jpUsers = users.filter(user => user.country === 'jp')
4. アロー関数で'function'を減らす
コールバック関数などがすっきりします。
アロー関数とfunctionは厳密には等価でないようなので、既存のコードを置き換える場合には注意が必要です。
before
function getUserName (user) {
return user.getName()
}
const userNames = users.map(getUserName)
after
const userNames = users.map(user => user.getName())
5. Objectでproperty名を省略
Objectのproperty名のvalueに入れる変数名が一致する場合、以下のように書くことができます。
before
const name = getName()
const age = getAge()
const userObj = {
name: name,
age: age,
type: 1
}
after
const name = getName()
const age = getAge()
const userObj = {
name,
age,
type: 1
}
6. Spread演算子でObjectを展開
functionの引数にも使えます。
render () {
const defaultStyle = {
fontSize: 10,
fontWeight: 'bold',
margin: 10
}
const blueStyle = {
...defaultStyle,
color: 'blue'
}
const textProps = {
value: 'foo',
onTouch: this._onTouch,
style: blueStyle
}
return <Text {...textProps} />
}