Portとは
Elmとjsがやりとりするための構文。
以下はElmからjsにアクセスする簡単なコード。
Elm側
port hello : String -> Cmd msg
js側
app.ports.hello.subscribe(() => {
console.log("Hello!")
});
Cannot read property 'hello' of undefined
ElmでPortを使っていると、1度はこのエラーを目にしたことがあるだろう。
このエラーは、js側にPort処理を書いてあり、Elm側に対応するPortが存在しない場合に起こる。
私がこのエラーに遭遇し解決しようとした時のエピソードがこちら↓
エラーの原因
結論、原因はそのPortが使われていないからだった。
Elmではどこでも使われてないものはコンパイルで弾かれるらしい。なるほどなぁ〜
まとめ
Cannot read property 'hogehoge' of undefined
に遭遇したら以下を確認すること
- Elm側にそのPortは存在するか?
- Elm側のPort名がタイポしていないか?
- Elm側のPortはどこかで呼ばれているか? (<- New!)