Soy nuevo en ReactJS y en React-Router. Tengo un componente que recibe a través de accesorios un <Link/>
objeto de react-router . Cada vez que el usuario hace clic en el botón 'siguiente' dentro de este componente, quiero invocar el <Link/>
objeto manualmente.
En este momento, estoy usando referencias para acceder a la instancia de respaldo y haciendo clic manualmente en la etiqueta 'a' que <Link/>
genera.
Pregunta: ¿Hay alguna forma de invocar manualmente el enlace (por ejemplo this.props.next.go
)?
Este es el código actual que tengo:
//in MasterPage.js
var sampleLink = <Link to="/sample">Go To Sample</Link>
<Document next={sampleLink} />
//in Document.js
...
var Document = React.createClass({
_onClickNext: function() {
var next = this.refs.next.getDOMNode();
next.querySelectorAll('a').item(0).click(); //this sounds like hack to me
},
render: function() {
return (
...
<div ref="next">{this.props.next} <img src="rightArrow.png" onClick={this._onClickNext}/></div>
...
);
}
});
...
Este es el código que me gustaría tener:
//in MasterPage.js
var sampleLink = <Link to="/sample">Go To Sample</Link>
<Document next={sampleLink} />
//in Document.js
...
var Document = React.createClass({
render: function() {
return (
...
<div onClick={this.props.next.go}>{this.props.next.label} <img src="rightArrow.png" /> </div>
...
);
}
});
...
fuente
React Router 4 incluye un withRouter HOC que le da acceso al
history
objeto a través dethis.props
:fuente
En la versión 5.x , puede usar el
useHistory
gancho dereact-router-dom
:fuente
if ((routerHistory.location.pathname + routerHistory.location.search) !== navigateToPath) { routerHistory.push(navigateToPath); }
history
variable, la invocación de directoriosuseHistory().push
no está permitida por las reglas de ganchoshttps://github.com/rackt/react-router/blob/bf89168acb30b6dc9b0244360bcbac5081cf6b38/examples/transitions/app.js#L50
o incluso puedes intentar ejecutar onClick this (solución más violenta):
fuente
assign
no es una propiedad, es una función.Ok, creo que pude encontrar una solución adecuada para eso.
Ahora, en lugar de enviar
<Link/>
como accesorio al documento, envío<NextLink/>
un envoltorio personalizado para el enlace del enrutador de reacción. Al hacer eso, puedo tener la flecha hacia la derecha como parte de la estructura de Enlace sin dejar de tener el código de enrutamiento dentro del objeto Documento.El código actualizado se ve así:
PD : si está utilizando la última versión de react-router, es posible que deba utilizarla en
this.context.router.transitionTo
lugar dethis.context.transitionTo
. Este código funcionará bien para react-router versión 0.12.X.fuente
React Router 4
Puede invocar fácilmente el método push a través del contexto en v4:
this.context.router.push(this.props.exitPath);
donde el contexto es:
fuente
BrowserRouter
, el objeto de contexto de mis componentes no contiene unrouter
objeto. ¿Estoy haciendo algo mal?router: React.PropTypes.object.isRequired
. No sé por qué no funcionó sin laisRequired
llave. Además,<Link>
parece ser capaz de obtener elhistory
contexto, pero no pude replicarlo.this.props.history.push()
en React Router v4. Sin embargo, solo encontré esto inspeccionando los accesorios por los que pasa React Router. Parece funcionar, pero no estoy seguro de si es una buena idea.de nuevo, esto es JS :) esto todavía funciona ...
fuente