Saya baru mengenal ReactJS dan React-Router. Saya memiliki komponen yang menerima melalui alat peraga <Link/>
objek dari react-router . Setiap kali pengguna mengklik tombol 'next' di dalam komponen ini saya ingin memanggil <Link/>
objek secara manual.
Saat ini, saya menggunakan referensi untuk mengakses contoh dukungan dan secara manual mengklik tag 'a' yang <Link/>
dihasilkan.
Pertanyaan: Apakah ada cara untuk secara manual menjalankan Tautan (mis. this.props.next.go
)?
Ini adalah kode saat ini yang saya miliki:
//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>
...
);
}
});
...
Ini adalah kode yang saya ingin miliki:
//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>
...
);
}
});
...
sumber
React Router 4 menyertakan withRouter HOC yang memberi Anda akses ke
history
objek melaluithis.props
:sumber
Di versi 5.x , Anda dapat menggunakan
useHistory
kaitreact-router-dom
:sumber
if ((routerHistory.location.pathname + routerHistory.location.search) !== navigateToPath) { routerHistory.push(navigateToPath); }
history
variabel, memohon direktoriuseHistory().push
tidak diizinkan oleh aturan kaithttps://github.com/rackt/react-router/blob/bf89168acb30b6dc9b0244360bcbac5081cf6b38/examples/transitions/app.js#L50
atau Anda bahkan dapat mencoba menjalankan onClick this (solusi yang lebih keras):
sumber
assign
bukan properti, itu fungsi.Ok, saya pikir saya bisa menemukan solusi yang tepat untuk itu.
Sekarang, alih-alih mengirim
<Link/>
sebagai penyokong ke Dokumen, saya mengirim<NextLink/>
yang merupakan pembungkus khusus untuk Tautan router reaksi. Dengan melakukan itu, saya dapat memiliki panah kanan sebagai bagian dari struktur Link sambil tetap menghindari memiliki kode perutean di dalam objek Dokumen.Kode yang diperbarui terlihat seperti berikut:
PS : Jika Anda menggunakan versi terbaru dari router reaksi Anda mungkin perlu menggunakan
this.context.router.transitionTo
sebagai gantinyathis.context.transitionTo
. Kode ini akan berfungsi dengan baik untuk react-router versi 0.12.X.sumber
Bereaksi Router 4
Anda dapat dengan mudah memanggil metode push melalui konteks di v4:
this.context.router.push(this.props.exitPath);
dimana konteksnya adalah:
sumber
BrowserRouter
, objek konteks komponen saya tidak mengandungrouter
objek. Apakah saya melakukan sesuatu yang salah?router: React.PropTypes.object.isRequired
. Saya tidak tahu mengapa itu tidak berhasil tanpaisRequired
kunci. Juga,<Link>
tampaknya bisa mendapatkanhistory
konteksnya, tetapi saya tidak bisa meniru itu.this.props.history.push()
React Router v4. Saya hanya menemukan ini dengan memeriksa alat peraga yang React Router lewat. Tampaknya bekerja tetapi saya tidak yakin apakah itu ide yang bagus.sekali lagi ini JS :) ini masih berfungsi ....
sumber