Короче говоря: -
Я хочу сначала обновить дочернее состояние, а затем обновить родительское состояние, но реагирует на пакеты setSate и сначала вызывает родительский setState, а затем дочерние.Для большего понимания прочитайте объяснение, написанное ниже.
По сути, у меня есть родительский компонент, имеющий два дочерних элемента.
- Компонент сортировки: - Этот компонент открывает раскрывающийся список для сортировкивыбор вариантов.при щелчке он должен обновить локальное состояние, а затем вызвать функцию, переданную в качестве подпорки от родителя.
- Коллекция продукта: - Этот компонент показывает продукты на основе выбранной сортировки.
Я передаю функцию (handleClick
) из родительского компонента для сортировки, чтобы получить значение выбранной сортировки в родительский компонент и затем передать его в коллекцию товаров.
Поскольку sort - это выпадающий список, я хочу сначала закрыть его, как только пользователь выберет опцию, а затем я хочу обновить родительский элемент.
Сейчас я использую его таким образом, сначала обновляя локальное состояние иобратный вызов, вызывающий функцию, переданную из parent.
handleClick(param) {
this.setState({ selectedType: param.slug }, () =>
this.props.onHandleSort(param.slug)
)
}
Но, как написано в React docs , он пакетирует процесс и сначала вызывает родительский setState, а затем дочерний.
Например, если и родительский, и дочерний вызовы вызывают setState во время события щелчка, дочерний элемент не перерисовывается дважды.Вместо этого React «сбрасывает» обновления состояния в конце события браузера.Это приводит к значительному повышению производительности в более крупных приложениях.
Мне нужно, чтобы это происходило таким образом только потому, что мне нужно, чтобы мой раскрывающийся список сначала закрывался, а родитель должен обновляться.
Я попробовал следующее, но, похоже, ничего не работает.
- Сделал компонент сортировки не зависящим от состояния и зависимым от реквизитов от родителя, но для закрытия раскрывающегося списка потребуется время.
- Используется обратный вызов setState, но, как написано в docs, он сначала группирует и вызывает родительский setState, а затем потомки.