React Link bileşeninde onClick olayı nasıl kullanılır?


84

Reactjs yönlendiricisinden Link bileşenini kullanıyorum ve onClickevent'in çalışmasını sağlayamıyorum. Kod bu:

<Link to={this.props.myroute} onClick='hello()'>Here</Link>

Bunu yapmanın yolu mu yoksa başka bir yol mu?

Yanıtlar:


127

Sen geçiyoruz hello()da, bir dize olarak hello()yürütmek anlamına hellohemen.

Deneyin

onClick={hello}

32

Bunu kullanmalısın:

<Link to={this.props.myroute} onClick={hello}>Here</Link>

Veya (yöntem hellobu sınıfta yer alıyorsa ):

<Link to={this.props.myroute} onClick={this.hello}>Here</Link>

Güncelleme: ES6 ve en son sürüm için, tıklama yöntemiyle bazı parametreleri bağlamak istiyorsanız, şunu kullanabilirsiniz:

    const someValue = 'some';  
....  
    <Link to={this.props.myroute} onClick={() => hello(someValue)}>Here</Link>

4
Ya da daha iyisithis.hello.bind(this)
webNeat

4
^ Yapıcıdaki eylemleri her zaman performans sorunlarına yol açabilecek şekilde bağlayıcı olarak bağlamalısınız.
Nunchucks

1
Bağlantı "to" gereklidir, ancak çoğu zaman sadece onClick () 'e ihtiyacım var, şu anda buna benzer bir şey yapmam gerekiyor <Link to="" onClick={this.delete}>Delete</Link>. Keşke burada "yapmak" isteğe bağlıdır.
newman

2
@newman Neden Linkolmadan kullanasınız to? İhtiyacınız yoksa, o zaman yöntemle <button>birlikte a gibi başka bir bileşen onClickve gitmekte fayda var;).
Guilherme Oderdenge

23

Bunun genel olarak kullanmak için iyi bir model olduğuna inanmıyorum. Bağlantı, onClick olayınızı çalıştıracak ve ardından rotaya yönlendirecektir, böylece yeni rotaya navigasyonda hafif bir gecikme olacaktır. Daha iyi bir strateji, yaptığınız gibi 'to' prop ile yeni rotaya gitmektir ve yeni bileşenin componentDidMount () işlevinde merhaba işlevinizi veya başka herhangi bir işlevi çalıştırabilirsiniz. Size aynı sonucu verecektir, ancak rotalar arasında çok daha yumuşak bir geçişle.

Bağlam için, bunu, redux mağazamı burada olduğu gibi Link'te bir onClick olayıyla güncellerken fark ettim ve yeni rota bileşenini takmadan önce ~ .3 saniyelik boş beyaz ekran gecikmesine neden oldu. API araması yoktu, bu yüzden gecikmenin bu kadar büyük olmasına şaşırdım. Ancak, konsolda yalnızca 'merhaba' kaydı yapıyorsanız, gecikme fark edilmeyebilir.


Mevcut bileşenimde onClick, yeni rotaya geçmeden önce çereze kaydettiğim bir geri arama url'si var . Bu geri arama url'sini bir sonraki bileşende almayacağım, bu yüzden bunu kendisinin geçişinden önce yapmam gerekiyor. Buna alternatif var mı? Not: Geri arama url'si yenilendikten sonra bile erişilebilir olmalıdır, böylece onu mağazada kaydedebilir.
Parth Mistry

1
React-navigation kullanıyorsanız: Link kullanma derdim, sadece TouchableOpacity veya TouchableWithoutFeedback kullanın, ardından onPress işlevinizde url'nizi gezinebilir ve bir nav parametresi olarak iletebilirsiniz.React onPress={() => { this.props.navigation.navigate('NameOfNextScreen', { callbackUrl: 'http://.callbackUrl.com', });-navigasyonu kullanmıyorsanız I sadece Link'in onClick'ini kullanır ve küçük performans sorunu için endişelenmeyin. Muhtemelen fark edilmeyecek.
Nunchucks

İyi tavsiye! Teşekkürler!
aspiringsoftwaredev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.