created: 2019-03-03T03:16:26.000Z

lodashのchain/wrapperオブジェクトをjsxで使う

lodashのchainに配列を渡すとlodashWrapperオブジェクトが得られる。これはlodashの便利メソッドを色々持っているArrayみたいな機能を持っている

使い方

こんな按配で縦に処理が並べられるのは若干見やすいような気がする。lodashWrapperのことを知らなくても何をしてるかはなんとなく想像つくし

import _ from 'lodash';  // `chain` メソッドでも同じことができるようだ

const _List = _(list)
  .map(x => ({ id: x.id }))
  .uniqBy(({ id }) => id)
  .sortBy(({ id }) => id)

ceveat

jsxはlodashWrapperをハンドリング出来ないのでArrayにしてやる必要がある たとえばjsxでタグのリストを返すようなのに使う場合、こんな感じで最後にvalue()をつけてjs組み込みのArrayにしてやらないと展開されない

const _List = _(list)
  .map(x => ({ id: x.id }))
  .uniqBy(({ id }) => id)
  .sortBy(({ id }) => id)
  .value()

return (
    <Select value="1">
      // value() しないと _List.map がArrayでなくlodashWrapperを返してしまう
      {_List.map(({ id }) => <MenuItem value={id} />)}
    </Select>
)

参考

詳解 Terraform 第3版 ―Infrastructure as Codeを実現する
[ad] 詳解 Terraform 第3版 ―Infrastructure as Codeを実現する
Yevgeniy Brikman, 松浦 隼人 (単行本(ソフトカバー))