#javascript #reactjs #react-native #react-navigation
#javascript #reactjs #react-native #react-навигация
Вопрос:
Я использую React Navigation v4, и мне нужно знать navigation
, является ли элемент неизменяемым, потому что я хочу обернуть свой компонент с React.memo
Для контекста вот мой (надеюсь) чистый компонент React:
// notice the React.memo and the usage of navigation.state.routes and navigation.navigate
const TabBarComponent: React.FC<Props> = React.memo(({ navigation }) => {
const onSelect = (index) => {
const { [index]: selectedTabRoute } = navigation.state.routes
navigation.navigate(selectedTabRoute.routeName)
}
...
}
Комментарии:
1. Для будущих читателей здесь был дан ответ на вопрос: twitter.com/icookandcode/status/1312134830625153026
Ответ №1:
Я собираюсь ответить на свой собственный вопрос, основываясь на этом твите Сатьяджита Саху.
Он не является неизменяемым, но меняется только тогда, когда это необходимо (например, navigation.state изменяется). В v5 navigation.state перемещается в отдельный реквизит маршрута (или, в случае панели вкладок, реквизит состояния). Итак, да, вы можете обернуть компоненты, принимающие его, в React.memo.
Однако панель вкладок также принимает дополнительные реквизиты, такие как объект descriptors, содержащий параметры для каждого экрана. Так что это зависит от того, будет ли это иметь большое значение в зависимости от того, когда изменятся эти другие реквизиты.
По умолчанию все экраны обернуты в React.memo.
По сути, React Navigation не изменяет реквизит, когда в этом нет необходимости.
И это не делает ничего неизменным (например, с Object.freeze ), но они не рассматриваются как изменяемые внутренне, и вы не должны их изменять, подобно другим вещам в экосистеме React.