Angular4以降で導入された HttpHeaders 。
正直、これを使わなくても良い感じに HttpClient は書けるので、使う必要のある場面は多くはない。
でも、公式っぽいから使いたいと思ってしまい、いつも罠にはまる
HttpHeaders には、 set, append, delete メソッドが存在する。
しかし、 HttpHeaders は immutable なので、奇妙な動きをする。
例えば下記のような記述をする
const headers = new HttpHeaders({ 'Content-Type': 'application/json' });
headers.set('Accept', 'application/json');
headers // => どうなる?
一見なにも間違っていない。 headers には、 Content-Type と Accept の両方のヘッダーが存在しているはずです。
普通なら。
しかし、上記コードでは HttpHeaders は immutable なので、変更されない。
なんと set は 新しく HttpHeaders を作って返す メソッドなのだ。
つまり、上記コードを正しく各なら下記のように書く必要がある
let headers = new HttpHeaders({ 'Content-Type': 'application/json' });
headers = headers.set('Accept', 'application/json');
headers // => どっちも設定される!
なんという罠 ![]()
この問題、何が問題って set という名前が、自分を変更しているように感じるのだ。
いわゆる 名前重要 ってやつです。
しかし、考えてみても良い名前が浮かばない。
Ruby なら ! のあるなしで判断できるのだが、 JS では、どうしたら良いかわからない。(いや本当に Ruby はよくできた言語です)
でもとにかく set で自分を変更しないのは気持ち悪い。
非常に腹立たしいのだが、良い名前が思いつかない!!
良い名前があったら feature request したいので、良さげな名前があれば教えてください ![]()