您如何从重组中读取这种咖喱的功能。

时间:2019-03-27 16:20:29

标签: reactjs functional-programming currying recompose

在我的工作中,我们使用了recompose,并且使用了这种咖喱函数,对我来说似乎过于复杂,使我的大脑受伤。

有人可以用英语解释它的工作原理吗?

谢谢

  withStateHandlers(({ readAt, isSender }) => ({ trackVisibility: !isSender && !readAt }), {
    updateTrackVisibility: () => () => ({
      trackVisibility: false,
    }),
  }),

我知道readAt和isSender来自上面声明的一个片段。 最令人困惑的部分是在updateTrackVisibility ???

之后返回另一个函数的函数

1 个答案:

答案 0 :(得分:1)

来自recompose API

withStateHandlers(
  initialState: Object | (props: Object) => any,
  stateUpdaters: {
    [key: string]: (state:Object, props:Object) => (...payload: any[]) => Object
  }
)

props是从父级(或上方的HOC)传递的道具

state是从在 initialState

中创建的对象传递的

payload参数是从我们触发函数(处理程序)的地方传递的

这在您的代码中意味着什么:

第一个参数-({ readAt, isSender }) => ({ trackVisibility: !isSender && !readAt })-创建一个名为trackVisibility的道具(带有编码值)

第二个参数- 添加一个函数,该函数在触发时会使trackVisibility为假

另一个(人为)示例:

const enhancer = withStateHandlers(({ title, text, maxChars }) => ({ isLongTitle: title.length > maxChars, text }), {
  addText: (state, props) => (text) => ({
    text: state.text + text,
    isLongTitle: state.text.length + text.length > props.maxChars
  }),
})

const MyComponent = enhancer(props => {
  return (
    <input onChange={event => props.addText(event.target.value)} />
  )
}