Estoy usando enlaces dinámicos para enlaces profundos.
const linking = {
prefixes: [
www.example.com
],
config: {
screens: {
Chat: {
path: ":id",
parse: {
id: (id) => `${id}`,
},
},
Profile: 'user',
},
},
};
function App() {
return (
<NavigationContainer linking={linking} fallback={<Text>Loading...</Text>}>
<Stack.Screen name="Chat" component={ChatScreen} />
<Stack.Screen name="Profile" component={ProfileScreen} />
</NavigationContainer>
);
}
www.example.com/user
siempre ruta a la ChatScreen
pantalla. Quiero enrutar en ProfileScreen
. ¿Cómo manejar el archivo de configuración en la vinculación?
Solución del problema
Establece tu config
debería como
const config = {
screens: {
Profile: '/user',
Chat:'/chat/:id'
},
};
tu linking
deberías ser
const linking = {
prefixes: [
'www.example.com',
],
config,
};
Al hacerlo, www.example.com/user
se enrutará al ProfileScreen
componente. www.example.com/chat/:<some id>
lo llevará a ChatScreen
con la ruta param como id
.
Actualización: parece que está intentando ChatScreen
pasar www.example.com/<some id>
y también tiene www.example.com/user
que cargar ProfileScreen
. El problema es que la navegación de React considera la cadena "user"
como parámetro id
y lo lleva a ChatScreen
sí mismo. Esa es la razón por la que agregué "chat" en la ruta de ChatScreen
.
Si realmente desea usar www.example.com/<some id>
to load ChatScreen
, puede usar getStateFromPath
y escribir su propia lógica para diferenciar entre ID y nombres de ruta. Para hacer eso, tu linking
voluntad será
const linking = {
prefixes: [
'www.example.com',
],
config,
getStateFromPath: (path, options) => {
if (path ==='/user') {
return {routes: [{ name: 'Profile' }],
};
} else {
return {routes: [{ name: 'Chat',params:{id:getIdFromPath(path)} }],
};
}
},
};
aquí checkIfValidPath
es para verificar si la ruta de la URL es real id
o "usuario". getIdFromPath
es extraer id de la url. No he probado esto, pero esto debería funcionar.
const checkIfValidPath=(path)=>{
return path!=='www.example.com/user';
}
const getIdFromPath =(path)=>{
return path.str.slice(16, str.length);
// 16 is the length of "www.example.com/", you probably should the number according to your url.
}
No hay comentarios.:
Publicar un comentario