経緯
Reactのコードを読んでいると以下のようなコードがあり、少し読み方に躓いたので備忘録として残します。
const mapDispatchToProps = dispatch => ({
onMount(categoryId){
dispatch(actions.fetchRanking(categoryId))
},
onUpdate(categoryId){
dispatch(actions.fetchRanking(categoryId))
}
})
書き換えると以下のようになります。
var obj = {
onMount(categoryId){
dispatch(actions.fetchRanking(categoryId))
},
onUpdate(categoryId){
dispatch(actions.fetchRanking(categoryId))
}
}
const mapDispatchToProps = function(dispatch){return obj}
言葉に表すと、「objを返す無名関数を定数mapDispatchToPropsに代入している」ということになります。
ここでobjをみるとomMount(){}
とonUpdate(){}
が設定されていますが、
key:value
の形式じゃないの?と疑問に思いました。
(rubyのHashの形式だと思い、先入観が走りました。。)
terminalで対話形式でnodeを動かしてみると
> obj = { test(hoge){ return hoge } }
{ test: [Function: test] }
お、どうやら関数として定義できたみいです。
関数として呼び出してみました。
> obj.test
[Function: test]
> obj.test('aaaaa')
'aaaaa'
調べたところ、ECMAScript 2015で導入された短縮形のメソッド定義の構文でした。
var obj = {
foo() {
/* コード */
},
bar() {
/* コード */
}
};
jsは短縮形を把握していないと少し躓くなと思いました。