2016-12-23 4 views
1

Ich möchte einen Weg haben, die wie folgt aussieht:Reagieren Router: einen erweiterten Weg als Weg param speichern

/projects/:projectId/:folder1/:folder2/.../:folderN/:currentFolder/ 

Wo projectId eine einzelne Zeichenfolge wie 1 sein wird, und folder1, folder2, ..., folderN kommen aus dem Weg Aufspalten an dieser Ort.

So ein regulärer Ausdruck wie dies würde es passen völlig in Ordnung:

/\/?projects\/(\w|\d)+\/folders\/((\w|\d)*\/?)*(\w|\d)+\/?/; 

jedoch Ich habe Probleme, den Pfad der Ordner speichern, der den aktuellen Ordner als Parameter in den Strecken vorangestellt werden. Das heißt, ich kann etwas wie :projectId und :currentFolder bekommen, aber ich möchte die Liste der Ordner, die zum aktuellen Ordner führen, als :path oder so etwas speichern.

Wie lautet die Syntax zum Speichern dieses beliebigen Pfades im React Router?

Antwort

1

Parameter passen nur URL segments.

für eine unbestimmte Anzahl von Ordnern, gibt es keine praktische Möglichkeit, dies nur mit params tun N Routen für mit (wo N eine bekannte maximale Anzahl der möglichen Ordner ist). Dies zu tun wäre natürlich mühsam und würde brechen, wenn N jemals ohne die Hinzufügung von noch mehr Routen zunehmen würde.

Ihre beste Wette wäre, einen Platzhalteroperator zu verwenden, um alle Ordner abzugleichen, und dann eine Zeichenfolge auf den Wert params.splat teilen, wo immer Sie auf die Ordner zugreifen müssen.

<Route path=":productId/**/:currentFolder" component={Folder} /> 

den Pfad Gegeben: /17/this/is/the/path/to/the/folder

const Folder = ({ params }) => { 
    const { productId, splat, currentFolder } = params 
    const folders = splat.split('/') 
    // productId = '17' 
    // currentFolder = 'folder' 
    // folders = ['this', 'is', 'the', 'path', 'to', 'the'] 
    ... 
} 
+0

Für welche Version reagieren-Router? Ich bekomme nicht "Splat" in meiner Route params – corvid

+0

Das war für 2/3. Benutzt du 4? –

+0

Ich bin auf Version 3.0.0 – corvid