Как перейти на другой экран после отправки действия с использованием приставки - PullRequest
0 голосов
/ 03 января 2019

После отправки действия по созданию нового объекта API-интерфейсом он возвращает его на mapStateToProps. При обратном вызове componentDidUpdate я могу сопоставить объект с реквизитами и открыть экран подробностей, передавая его. Проблема в том, что когда я возвращаюсь и пытаюсь создать новый объект (просто заполните форму), он продолжает вызывать componentDidUpdate с недавно созданным объектом в props (так как я устанавливаю состояние с содержимым, которое пользователь вводит, и this.props.deck все еще там.

Есть ли другой жизненный цикл, в котором я не могу получить мусор в реквизите или другую логику?

Мое действие по отправке:

this.props.createDeck(deckToBeCreated)  // dispatch an action to create a deck

Часть моего редуктора:

case ADD_NEW_DECK_SUCCESS: 
     return {
         ...state,
         deck: action.deck,
     }

в случае успеха я получу этот объект колоды, созданный API, здесь:

function mapStateToProps({specificDeckReducer}) {
    return {
        deck: specificDeckReducer.deck
    }
}


 componentDidUpdate() { // THE PROBLEM IS HERE.
        const { deck } = this.props
        if (deck != null && deck.id) {
            this.showDeckDetail(deck)
            this.reset()
        }
    }

1 Ответ

0 голосов
/ 03 января 2019

Вы можете настроить ComponentDidUpdate() таким образом, чтобы он работал только при получении обновленного реквизита.

ComponentDidUpdate(prevProps){
   if(prevProps.deck !== this.props.deck){
     //do something
   }
}

Таким образом, событие жизненного цикла не будет запускаться.Таким образом, вы должны иметь возможность свободно перемещаться, не беспокоясь о событиях компонента.

...