如何在React的recompose的生命周期方法中设置state?

时间:2017-01-14 14:53:19

标签: javascript reactjs lifecycle recompose

我在React项目中使用重构 https://github.com/acdlite/recompose/

这是一个很棒的图书馆。我正在使用compose实用程序作为容器组件,将状态向下作为道具传递给表示组件,如下所示:

const enhance = compose(
  lifecycle({
    componentDidMount() {
      myCall
        .getResponse([productId])
        .then(products => {
          setIsReady(true);
        });
    },
  }),
  withState('isAvailable', 'setIsAvailable', false),
  withState('isReady', 'setIsReady', false),
  mapProps(({
    setIsAvailable,
    setIsReady,
    ...state,
  }) => ({
    onLogoutTouchTap: () => {
      ...

请注意setIsReady(true)内的componentDidMount来电。这是我想要做的,但是lifecycle / componentDidMount无法访问setIsReady。如何通过重构来完成从componentDidMount更新状态的预期结果?

1 个答案:

答案 0 :(得分:17)

我发现如果您在lifecycle方法之后移动withState方法,则可以通过访问this.props.setterFunction来访问设置者。就我而言,这是我正在寻找的解决方案:

const enhance = compose(
  withState('isAvailable', 'setIsAvailable', false),
  withState('isReady', 'setIsReady', false),
  lifecycle({
    componentDidMount() {
      myCall
        .getResponse([productId])
        .then(products => {
          this.props.setIsReady(true);
        });
    },
  }),
  mapProps(({
    setIsAvailable,
    setIsReady,
    ...state,
  }) => ({
    onLogoutTouchTap: () => {
      ...