Я новичок в ReactJS и React-Router. У меня есть компонент, который через реквизит получает <Link/>
объект от реактивного маршрутизатора . Каждый раз, когда пользователь нажимает кнопку «Далее» внутри этого компонента, я хочу вызвать <Link/>
объект вручную.
Прямо сейчас я использую refs для доступа к резервному экземпляру и вручную нажимаю на <Link/>
генерируемый тег «a» .
Вопрос: есть ли способ вручную вызвать ссылку (например this.props.next.go
)?
Это текущий код, который у меня есть:
//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>
...
);
}
});
...
Вот код, который я хотел бы иметь:
//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>
...
);
}
});
...
источник
React Router 4 включает withRouter HOC, который дает вам доступ к
history
объекту черезthis.props
:источник
В версии 5.x вы можете использовать
useHistory
ловушкуreact-router-dom
:источник
if ((routerHistory.location.pathname + routerHistory.location.search) !== navigateToPath) { routerHistory.push(navigateToPath); }
history
переменную,useHistory().push
https://github.com/rackt/react-router/blob/bf89168acb30b6dc9b0244360bcbac5081cf6b38/examples/transitions/app.js#L50
или вы даже можете попробовать выполнить onClick this (более жестокое решение):
источник
assign
это не свойство, это функция.Хорошо, думаю, я смог найти для этого подходящее решение.
Теперь вместо отправки в
<Link/>
качестве опоры в Document я отправляю<NextLink/>
пользовательскую оболочку для ссылки на реактивный маршрутизатор. Делая это, я могу иметь стрелку вправо как часть структуры Link, избегая при этом наличия кода маршрутизации внутри объекта Document.Обновленный код выглядит следующим образом:
PS : Если вы используете последнюю версию response-router, вам может потребоваться использовать
this.context.router.transitionTo
вместоthis.context.transitionTo
. Этот код будет нормально работать с реактивным маршрутизатором версии 0.12.X.источник
React Router 4
Вы можете легко вызвать метод push через контекст в v4:
this.context.router.push(this.props.exitPath);
где контекст:
источник
BrowserRouter
, объект контекста моих компонентов не содержитrouter
объекта. Я что-то не так делаю?router: React.PropTypes.object.isRequired
. Не знаю, почему не получилось безisRequired
ключа. Кроме того,<Link>
похоже, удалось получитьhistory
контекст, но я не мог его воспроизвести.this.props.history.push()
в React Router v4. Я нашел это, только проверив реквизиты, которые передает React Router. Кажется, это работает, но я не уверен, что это хорошая идея.снова это JS :) это все еще работает ....
источник