#reactjs #react-native #parameters #react-navigation #deep-linking
Вопрос:
Я использую глубокое связывание с навигацией по реакции для получения параметров из Url-адреса, но я хотел бы передать эти параметры объекту. Теперь я делаю это :
prefixes: [Linking.makeUrl('/'), 'https://test.app', 'https://*.test.app'],
config: {
screens: {
App: {
screens: {
Chat: {
path: 'chat/:firstName/:lastName/:birthdate',
parse: {
firstName: (firstName: string) => decodeURIComponent(firstName),
lastName: (lastName: string) => decodeURIComponent(lastName),
birthdate: (birthdate: string) => decodeURIComponent(birthdate),
},
},
Это и есть результат :
const { firstName, lastName, birthdate} = route.params
И что мне нужно, так это объект с внутренним именем, фамилией, датой рождения :
const { userObject } = route.params
Ответ №1:
Вы можете использовать getStateFromPath для настройки параметров так, как вам нравится.
Что-то вроде этого должно сработать. Примечание: Я не тестировал с вложенными экранами. Возможно, вам придется немного изменить это, чтобы обрабатывать вложенные экраны.
import { getStateFromPath } from '@react-navigation/native';
const linking = {
prefixes: [Linking.makeUrl('/'), 'https://test.app', 'https://*.test.app'],
config: {
screens: {
App: {
screens: {
Chat: {
path: 'chat/:firstName/:lastName/:birthdate',
parse: {
firstName: (firstName: string) => decodeURIComponent(firstName),
lastName: (lastName: string) => decodeURIComponent(lastName),
birthdate: (birthdate: string) => decodeURIComponent(birthdate),
},
},
},
},
},
},
getStateFromPath: (path, options) => {
const state = getStateFromPath(path, options);
const newState = {
...state,
routes: states.routes.map(route => {
if (route.name === 'Chat') {
// modify your params however you like here!
return {
...route,
params: { userObject: route.params }
}
} else {
return route
}
}),
};
return newState;
},
}
Комментарии:
1. Можете ли вы указать, в каком файле я должен обновить этот код?
2. @AyushKatuwal Переменная связи, созданная в этом блоке кода выше, передается в NavigationContainer в качестве реквизита. Таким образом, технически это может быть где угодно, но, вероятно, это будет лучше всего в вашей точке входа в ваше приложение — App.jsx или index.js или что-то в этом роде. Я рекомендую проверить эти две страницы документов, которые объясняют это: Глубокие ссылки и настройка ссылок
3. Вау, спасибо, я понял это 🙂