reactjs - pass - react router params
Pase el objeto a través del enlace en el enrutador de reacción (5)
¿Es posible pasar un objeto a través del componente
Link
en react-router?
Algo como:
<Link to=''home'' params={{myObj: obj}}> Click </Link>
De la misma manera que pasaría los
props
del componente
Parent
to
Child
.
Si no es posible, ¿cuál es la mejor manera de lograrlo?
Tengo una aplicación React + Flux y renderizo la tabla con algunos datos.
Lo que estoy tratando de hacer es que cuando hago clic en una de las filas me llevaría a algún componente de
detalles
para esta fila.
La fila tiene todos los datos que necesito, así que pensé que sería genial si pudiera pasarlos a través de
Link
.
La otra opción sería pasar la
id
de la fila en la URL, leerla en el componente de
detalles
y solicitar los datos de la tienda por ID.
No estoy seguro de cuál es la mejor manera de lograr lo anterior ...
Así que mi conclusión final sobre esta pregunta es que no lo pensé bien.
Parecía natural simplemente pasar mis datos a través del
Link
para poder acceder a ellos en mi componente
Child
.
Como
Colin Ramsay
mencionó, hay algo llamado
state
en el
Link
pero esa no es la forma de hacerlo.
Funcionaría bien cuando los datos se pasan a través del
Link
solo si el usuario hace clic en algo y se lo lleva al componente
Child
.
El problema surge cuando el usuario accede a la
url
que se usa en
Link
entonces no hay forma de obtener los datos.
Entonces, la solución en mi caso fue pasar la
ID
en los parámetros de
Link
y luego verificar si mi
Store
tiene los datos (el usuario accede a ellos a través de
Link
) y luego obtener estos datos de la
Store
.
O
si los datos no están en la
Store
llame a la
action
para obtener los datos de la API.
Es posible pasar un objeto a través de un enlace. Agregue sus datos dentro de una consulta en lugar de params y stringifique el objeto:
<Link to={{
pathname: `/blog/${post.id}`,
query: {
title: post.title,
content: post.content,
comments: JSON.stringify(post.comments)
}
}}>Read More...</Link>
Luego, en su componente hijo, vuelva a analizar la cadena en un objeto:
JSON.parse(this.props.comments)
Esto no es posible, debe pasar algo que se pueda almacenar en la URL, como una ID de cadena. Luego usaría esa ID para realizar una búsqueda del objeto.
No, no puede pasar un objeto en
params
, por lo que estoy de acuerdo con usted en que su mejor plan es pasar la identificación a una tienda, hacer que la tienda emita un evento
CHANGE
y que los componentes consulten la tienda para obtener información.
Puede intentar JSON serializarlo y luego des-serializarlo en el extremo receptor.