Как мне установитьState в методе жизненного цикла React перекомпоновать?

Я использую перекомпоновку в своем проекте 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 с помощью перекомпоновки?


person Mark Shust at M.academy    schedule 14.01.2017    source источник


Ответы (1)


Что ж, я обнаружил, что если вы переместите метод 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: () => {
      ...
person Mark Shust at M.academy    schedule 14.01.2017