Как сначала обновить дочернее состояние, а затем - родительское

Сегодня я потерял часы, чтобы найти причину, к счастью, эта проблема связана не с реализацией MapFragment, но, к сожалению, это не работает, потому что вложенные фрагменты поддерживаются только через библиотеку поддержки от версии 11.

My реализация имеет действие с панелью действий (в режиме с вкладками) с двумя вкладками (без просмотра), один имеет карту, а другой - список записей. Конечно, я был очень наивным, чтобы использовать MapFragment внутри своих вкладки-фрагментов, et voila, приложение разбилось каждый раз, когда я переключился обратно на карту-вкладку.

(та же проблема, которую я также имел бы в случае моей вкладки -фрагмент будет раздувать любой макет, содержащий любой другой фрагмент).

Один из вариантов заключается в использовании MapView (вместо MapFragment) с некоторыми накладными расходами (см. MapView Docs вместо замены в layout.xml другой вариант - использовать библиотеку поддержки от версии 11, но затем использовать программный подход, поскольку вложенные фрагменты не поддерживаются с помощью макета. Или просто работайте программно, явно разрушая фрагмент (например, в ответе от Matt / Vidar), btw: тот же эффект достигается с помощью MapView (вариант 1).

Но на самом деле я не хотел потерять карту каждый раз, когда я убираю ее, то есть хочу сохранить он в памяти и очистке только после закрытия операции, поэтому я решил просто скрыть / показать карту во время табуляции, см. FragmentTransaction / hid е

0
задан Code Maniac 22 February 2019 в 07:17
поделиться

1 ответ

Судя по вашей кодовой ручке , вы должны поднять обертку withRouter до родителя, дать ему понять selectedType и передать его компоненту сортировки. В вашем onHandleSort вы можете установить новый query.

class Parent extends Component {
  // ...
  handleClick (slug) => {
    this.props.router.push({ query: { sorting: slug } })
  }
  // ...
  render () {
    const sorting = this.props.router && this.props.router.query
      ? this.props.router.query.sorting
      : 'RELEVANCE';

    return (
      // ...
      <Sort value={sorting} onHandleSort={this.handleClick} />
      // ...
    );
  }
}

export default withRouter(Parent);

export default class Sort extends Component {
  // ...
  handleClick (param) => {
    this.props.onHandleSort(param.slug)
  }
  // ...
  render () {
    const selectedType = this.props.sorting;

    return (
      // ...
    );
  }
}

0
ответ дан Lorenz Henk 22 February 2019 в 07:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: