5

我一直在查看 react recompose 库并试图在这里掌握差异,结果是一样的,尝试阅读文档,但更加困惑,为什么有两种方法可以做同样的事情?

const enhance = compose(
  withState('counter', 'setCounter', 0),
  withHandlers({
    increment: props => () => props.setCounter(n => n + 1),
    decrement: props => () => props.setCounter(n => n - 1)
  })
)

const enhance = compose(
  withState('counter', 'setCounter', 0),
  withProps(({ setCounter }) => ({
    increment: () => setCounter(n => n + 1),
    decrement: () => setCounter(n => n - 1)
  }))
)
4

2 回答 2

9

它主要与性能相关,因为withHandlers不会在每次渲染时创建一个新函数。来自相关的 Github 问题

withProps每次更新时都会创建新功能;另一方面,withHandlers不会创建新功能。

withHandlers当您想将这些函数传递给通过shouldComponents浅比较 props 实现的其他组件时(例如如何recompose/pure做),这很有用。

于 2017-03-04T09:20:41.577 回答
8

除了 Fabian Schultz 的回答,请注意,withProps可以用来添加任何类型的道具,而withHandlers只能添加功能。

因此,当您添加功能withHandlers时,请尽可能使用以提高性能。当您添加任何其他内容时,请使用withProps(或者mapProps如果您想删除所有其他道具)。

于 2017-05-15T11:44:23.610 回答