點燈坊

失くすものさえない今が強くなるチャンスよ

使用 lensProp() 對 Object 建立 Lens

Sam Xiao's Avatar 2021-04-22

雖然可組合 lens()prop()assoc() 組合出 Lens,但實務上會使用更精簡的 lensProp()

Version

Ramda 0.27.1

prop()、assoc()

import { lens, prop, assoc } from 'ramda'

let data = {
  title: 'FP in JavaScript',
  price: 100
}

let titleLens = lens(prop('title'), assoc('title'))  // ?

可將 prop()assoc() 傳入 lens() 組合出 Lens。

lensprop000

lensProp()

import { lensProp } from 'ramda'

let data = {
  title: 'FP in JavaScript',
  price: 100
}

let titleLens = lensProp('title') // ?

Ramda 提供了更精簡方式,只要透過 lensProp() 可一步建立 Lens,它會自動幫我們建立相對應 getter 與 setter,實務上都直接使用 lensProp(),甚少使用 lens()

lensProp()
String → Lens s a
針對 Object 建立 Lens

  • String:傳入 property 名稱
  • Lens s a:回傳該 property 的 Lens

lensprop001

Conclusion

  • lensProp() 只要提供 Object 的 property 名稱就可建立 Lens,非常方便

Reference

Ramda, lensProp()