React-yönlendiricide v2.4.0
veya üzerinde ve v4
birkaç seçenek olmadan önce
- İşlevini ekleyin
onLeave
içinRoute
<Route
path="/home"
onEnter={ auth }
onLeave={ showConfirm }
component={ Home }
>
- Kullanım fonksiyonu
setRouteLeaveHook
içincomponentDidMount
Ayrılma kancası ile bir rotadan ayrılmadan önce bir geçişin olmasını engelleyebilir veya kullanıcıyı uyarabilirsiniz.
const Home = withRouter(
React.createClass({
componentDidMount() {
this.props.router.setRouteLeaveHook(this.props.route, this.routerWillLeave)
},
routerWillLeave(nextLocation) {
// return false to prevent a transition w/o prompting the user,
// or return a string to allow the user to decide:
// return `null` or nothing to let other hooks to be executed
//
// NOTE: if you return true, other hooks will not be executed!
if (!this.state.isSaved)
return 'Your work is not saved! Are you sure you want to leave?'
},
// ...
})
)
Bu örneğin, içinde withRouter
tanıtılan yüksek dereceli bileşeni kullandığını unutmayın .v2.4.0.
Ancak, URL'deki rotayı manuel olarak değiştirirken bu çözüm tam olarak çalışmıyor
Anlamda olduğu
- Onayı görüyoruz - tamam
- sayfanın içeriği yeniden yüklenmiyor - tamam
- URL değişmiyor - tamam değil
İçin react-router v4
İstemi veya özel geçmişini kullanarak:
Ancak react-router v4
, Prompt
from'react-yönlendiricinin yardımıyla uygulanması oldukça kolaydır.
Belgelere göre
Komut istemi
Bir sayfadan ayrılmadan önce kullanıcıyı uyarmak için kullanılır. Uygulamanız, kullanıcının uzaklaşmasını engellemesi gereken bir duruma girdiğinde (bir formun yarı dolu olması gibi), bir <Prompt>
.
import { Prompt } from 'react-router'
<Prompt
when={formIsHalfFilledOut}
message="Are you sure you want to leave?"
/>
mesaj: dize
Kullanıcıdan uzaklaşmaya çalıştıklarında kullanıcıyı uyaran mesaj.
<Prompt message="Are you sure you want to leave?"/>
mesaj: func
Kullanıcının gitmeye çalıştığı bir sonraki konum ve eylemle birlikte çağrılacaktır. Kullanıcıya bir bilgi istemi veya geçişe izin vermek için true göstermek için bir dize döndürün.
<Prompt message={location => (
`Are you sure you want to go to ${location.pathname}?`
)}/>
ne zaman: bool
Bunun yerine şartlı bir render <Prompt>
bir bekçi arkasında, daima içinde oluşturulur, ancak geçebilir when={true}
ya when={false}
önlemek veya buna göre yeni baştan tasarlanmıştır.
Oluşturma yönteminizde, ihtiyacınıza göre belgelerde belirtildiği gibi bunu eklemeniz yeterlidir.
GÜNCELLEME:
Kullanım sayfadan ayrılırken gerçekleştirilecek özel bir işlem yapmak istemeniz durumunda, özel geçmişi kullanabilir ve Yönlendiricinizi aşağıdaki gibi yapılandırabilirsiniz.
history.js
import createBrowserHistory from 'history/createBrowserHistory'
export const history = createBrowserHistory()
...
import { history } from 'path/to/history';
<Router history={history}>
<App/>
</Router>
ve sonra bileşeninizde history.block
beğenmekten yararlanabilirsiniz
import { history } from 'path/to/history';
class MyComponent extends React.Component {
componentDidMount() {
this.unblock = history.block(targetLocation => {
// take your action here
return false;
});
}
componentWillUnmount() {
this.unblock();
}
render() {
//component render here
}
}
componentWillUnmount() { if (confirm('Changes are saved, but not published yet. Do that now?')) { // publish and go away from a specific page } else { // do nothing and go away from a specific page } }
böylece yayınlama işlevinizi sayfadan ayrılırken çağırabilirsiniz