Как передать реквизиты в React-Navigation, чтобы управляемый компонент мог повторно отрисоваться при изменении этих реквизитов

Я пытаюсь перейти от компонента A к B, передавая реквизиты таким образом (в качестве параметров):

this.props.navigation.navigate("B",{
            retrievePlayingNow:this.props.retrievePlayingNow, // props come from component C
            skipSong: this.skipsong, // this is a function

          });
    }

поэтому, когда я вызываю функцию skipSong, она меняет реквизиты на компоненте C (который является родительским компонентом A), реквизиты на A меняются, но на компоненте B реквизиты остаются такими же, и он не повторно визуализируется для отображения новой информации . Есть ли другой способ сделать это с помощью React-Navigation?


person Daniel Larios    schedule 22.10.2018    source источник


Ответы (2)


Здесь вступает в действие state management libraries.

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

Итак, поместите переменную retrievePlayingNow в хранилище redux из C компонента и получите доступ к нему B компонентом. Поэтому, когда C (или кто-либо) изменяет значение этой переменной, все те компоненты, которые используют доступ к этой переменной (включая B), будут повторно отрисованы.

Еще одно преимущество использования любого state management library состоит в том, что вам не нужно создавать иерархию компонентов для передачи реквизитов, как вы это делали C -> A -> B. Все, что вы можете сделать, это отправить переменную в магазин из C и получить к ней прямой доступ с B.

person Siraj Alam    schedule 22.10.2018
comment
Да, я думал об этом, к сожалению, я не реализовал сокращение вовремя, и теперь в текущем состоянии моего приложения это не вариант. В следующий раз, думаю, сделаю. Я буду искать, спасибо !! - person Daniel Larios; 22.10.2018
comment
Что ж, вы можете в любое время добавить сокращение в свое приложение. Просто не изменяйте свое приложение, просто позвольте только будущим компонентам использовать сокращение. - person Siraj Alam; 22.10.2018

Вы можете использовать DeviceEventEmitter для добавления событий прослушивателя для повторного рендеринга без использования redux.

person zhou Dai    schedule 23.10.2018