Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

157
Views
Envolviendo una ruta de reacción en una declaración condicional

Estoy trabajando con el enrutador de reacción. Inicialmente, tenía dos componentes diferentes representados bajo la misma ruta, uno con un parámetro y otro sin (así es como se diferenciaron las rutas). Ahora estoy tratando de agregar parámetros opcionales a la primera ruta sin editar la segunda ruta. El problema es que no hay forma de saber la diferencia entre la primera ruta y la segunda.

Mi solución para esto fue envolver las rutas en una declaración condicional y la condición funciona para la primera ruta, pero no puedo llegar a la segunda porque la prueba que determina la declaración condicional solo se ejecuta en la primera representación de la ruta. Entonces, mi pregunta es ¿cómo envuelvo correctamente una ruta de reacción en una declaración condicional? Así es como se ven mis rutas:

 { !locationTest() ? <> <Route exact={true} path="/encounter-monitor/:queryData?" component={EncounterMonitor} /> </> : <> <Route exact={true} path="/encounter-monitor/:encounterID" component={EncounterMonitorDetails} /> </> }

Y la prueba:

 const locationTest = () => { let regex = new RegExp('/?'); let regex2 = new RegExp('/encounters-'); let theURL = window.location.href; let test = !regex.test(theURL) && regex2.test(theURL); return test }

Parece que no puedo hacer que la segunda ruta funcione de esta manera.

El primer componente tendrá una ruta que contiene / o /? y la segunda ruta siempre contendrá /encounters- .

about 4 years ago · Santiago Gelvez
2 answers
Answer question

0

Te estás acercando a esto mal. El enrutador React sirve para hacer que su aplicación sea una aplicación de una sola página mediante la representación condicional de componentes en función de la ubicación de la URL. Pero está tratando de agregar los datos a la URL como si fuera un lenguaje como php. ¿Quizás su solución radica en simplemente hacer componentes separados que manejen estos datos y simplemente pasarles los datos con dos rutas estáticas? O incluso tener una ruta y un componente pero renderizar condicionalmente los datos dentro de él (aunque recomendaría mantenerlos en componentes separados para que su proyecto sea más limpio)

about 4 years ago · Santiago Gelvez Report

0

En la mayoría de los escenarios, no desea renderizar 2 componentes diferentes en la misma ruta. Para pasar datos opcionales al componente, normalmente usaría los parámetros de búsqueda.

Esto significa que ya no debe pasar una ruta opcional para EncounterMonitor , sino mover esto a los parámetros de búsqueda. Una ruta de ejemplo sería:

 /encounter-monitor?query=foo+bar

Esto le permite diferenciarse fácilmente de:

 /encounter-monitor/1

Para respaldar lo anterior, debe actualizar sus rutas a:

 <> <Route exact={true} path="/encounter-monitor" component={EncounterMonitor} /> <Route exact={true} path="/encounter-monitor/:encounterID" component={EncounterMonitorDetails} /> </>

Luego actualice su EncounterMonitorDetails para usar useSearchParams :

 const [searchParams, setSearchParams] = useSearchParams();

Y maneje los parámetros de búsqueda (opcionales) que desea admitir.

 if (searchParams.has("query")) { const query = searchParams.get("query"); // do stuff... }

Al enlazar a una página, puede pasar los parámetros de búsqueda como parte del enlace:

 <Link to="/encounter-monitor?query=foo+bar"> foo bar encounter monitors </Link>
about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!