Saya bermain-main dengan React.js untuk pertama kalinya dan tidak dapat menemukan cara untuk menampilkan atau menyembunyikan sesuatu pada halaman melalui event klik. Saya tidak memuat pustaka lain ke halaman, jadi saya mencari cara asli menggunakan pustaka Bereaksi. Inilah yang saya miliki sejauh ini. Saya ingin menampilkan hasil div ketika acara klik menyala.
var Search= React.createClass({
handleClick: function (event) {
console.log(this.prop);
},
render: function () {
return (
<div className="date-range">
<input type="submit" value="Search" onClick={this.handleClick} />
</div>
);
}
});
var Results = React.createClass({
render: function () {
return (
<div id="results" className="search-results">
Some Results
</div>
);
}
});
React.renderComponent(<Search /> , document.body);
javascript
reactjs
pengguna1725382
sumber
sumber
Jawaban:
Bereaksi sekitar tahun 2020
Di dalam
onClick
callback, panggil fungsi setter hook negara untuk memperbarui status dan render ulang:JSFiddle
Bereaksi sekitar 2014
Kuncinya adalah memperbarui status komponen dalam penangan klik menggunakan
setState
. Ketika perubahan status diterapkan,render
metode dipanggil lagi dengan status baru:JSFiddle
sumber
sumber
Berikut adalah sintaks alternatif untuk operator ternary:
setara dengan:
Mengapa ramping
Juga sintaks alternatif dengan
display: 'none';
Namun, jika Anda terlalu sering menggunakan
display: 'none'
, ini menyebabkan polusi DOM dan akhirnya memperlambat aplikasi Anda.sumber
Ini pendekatan saya.
Dalam kode di atas, untuk mencapai ini, saya menggunakan kode seperti:
Itu akan membuat
SomeElement
hanya jikaopened
itu benar. Ini berfungsi karena cara JavaScript menyelesaikan kondisi logis:Alasan untuk menggunakan pendekatan ini alih-alih CSS 'display: none';
<TabView>
) akan berubah - bahkan jika Anda hanya melihat satu tab, semua 5 tab akan dirender ulangdisplay: invisible ? 'block' : 'none'
yang dapat merusak tata letaksomeBoolean && <SomeNode />
sangat sederhana untuk dipahami dan dipikirkan, terutama jika logika Anda terkait dengan menampilkan sesuatu atau tidak menjadi komplekssumber
this.setState({isOpened: !isOpened});
. Jangan bergantung pada negara itu sendiri, ketika Anda memodifikasi negara. Berikut adalah contoh yang baik: reactjs.org/docs/... Jadi harus:this.setState( s => ({isOpened: !s.isOpened}) )
. Perhatikan fungsi panah di dalam setState.dengan versi terbaru bereaksi 0.11 Anda juga dapat mengembalikan null agar konten tidak ditampilkan.
Render ke nol
sumber
Saya membuat komponen kecil yang menangani ini untuk Anda: react-toggle-display
Ini menetapkan atribut gaya
display: none !important
berdasarkan padahide
ataushow
alat peraga.Contoh penggunaan:
sumber
Sudah ada beberapa jawaban yang bagus, tetapi saya tidak berpikir mereka sudah dijelaskan dengan baik dan beberapa metode yang diberikan mengandung beberapa gotcha yang mungkin membuat orang tersandung. Jadi saya akan membahas tiga cara utama (plus satu opsi di luar topik) untuk melakukan ini dan menjelaskan pro dan kontra. Saya kebanyakan menulis ini karena Opsi 1 sangat direkomendasikan dan ada banyak potensi masalah dengan opsi itu jika tidak digunakan dengan benar.
Opsi 1: rendering bersyarat pada induknya.
Saya tidak suka metode ini kecuali Anda hanya akan membuat komponen satu kali dan meninggalkannya di sana. Masalahnya adalah itu akan menyebabkan reaksi untuk membuat komponen dari awal setiap kali Anda mengaktifkan visibilitas. Inilah contohnya. LogoutButton atau LoginButton sedang dilakukan secara kondisional di induk LoginControl. Jika Anda menjalankan ini, Anda akan melihat konstruktor dipanggil pada setiap klik tombol. https://codepen.io/Kelnor/pen/LzPdpN?editors=1111
Sekarang Bereaksi cukup cepat dalam membuat komponen dari awal. Namun, masih harus memanggil kode Anda saat membuatnya. Jadi jika konstruktor, componentDidMount, render, dll kode Anda mahal, maka itu akan secara signifikan memperlambat menunjukkan komponen. Ini juga berarti Anda tidak dapat menggunakan ini dengan komponen stateful di mana Anda ingin status dipertahankan ketika disembunyikan (dan dipulihkan saat ditampilkan.) Satu keuntungan adalah bahwa komponen tersembunyi tidak dibuat sama sekali sampai dipilih. Jadi komponen tersembunyi tidak akan menunda pemuatan halaman awal Anda. Mungkin juga ada kasus di mana Anda INGIN komponen stateful untuk mengatur ulang ketika diaktifkan. Dalam hal ini ini adalah pilihan terbaik Anda.
Opsi 2: rendering bersyarat pada anak
Ini menciptakan kedua komponen sekaligus. Kemudian hubung singkat sisa kode render jika komponen disembunyikan. Anda juga dapat membuat hubungan pendek logika lain dalam metode lain menggunakan prop yang terlihat. Perhatikan console.log di halaman codepen. https://codepen.io/Kelnor/pen/YrKaWZ?editors=0011
Sekarang, jika logika inisialisasi cepat dan anak-anak tanpa kewarganegaraan, maka Anda tidak akan melihat perbedaan dalam kinerja atau fungsionalitas. Namun, mengapa membuat React membuat komponen baru setiap toggle? Namun, jika inisialisasi mahal, Opsi 1 akan menjalankannya setiap kali Anda mengaktifkan komponen yang akan memperlambat halaman saat berpindah. Opsi 2 akan menjalankan semua init komponen pada pemuatan halaman pertama. Memperlambat beban pertama itu. Harus diperhatikan lagi. Jika Anda hanya menampilkan komponen satu kali berdasarkan kondisi dan tidak mengaktifkannya, atau Anda ingin mengatur ulang ketika beralih, maka Opsi 1 baik-baik saja dan mungkin opsi terbaik.
Namun, jika memuat halaman lambat merupakan masalah, itu berarti Anda mendapat kode mahal dalam metode siklus hidup dan itu umumnya bukan ide yang baik. Anda dapat, dan mungkin harus, menyelesaikan beban halaman yang lambat dengan memindahkan kode mahal dari metode siklus hidup. Pindahkan ke fungsi async yang dimulai oleh ComponentDidMount dan minta panggil balik ke dalam variabel keadaan dengan setState (). Jika variabel status adalah nol dan komponen terlihat maka minta fungsi render mengembalikan placeholder. Kalau tidak, render data. Dengan cara itu halaman akan dimuat dengan cepat dan mengisi tab saat memuat. Anda juga dapat memindahkan logika ke orang tua dan mendorong hasilnya ke anak-anak sebagai alat peraga. Dengan begitu Anda dapat memprioritaskan tab mana yang dimuat lebih dulu. Atau cache hasil dan hanya menjalankan logika saat komponen pertama kali ditampilkan.
Opsi 3: Menyembunyikan Kelas
Bersembunyi kelas mungkin yang paling mudah untuk diterapkan. Seperti yang disebutkan, Anda hanya membuat kelas CSS dengan tampilan: tidak ada dan menetapkan kelas berdasarkan prop. Kelemahannya adalah seluruh kode dari setiap komponen tersembunyi dipanggil dan semua komponen tersembunyi dilampirkan ke DOM. (Opsi 1 sama sekali tidak membuat komponen tersembunyi. Dan Opsi 2 kode pendek sirkuit yang tidak perlu ketika komponen disembunyikan dan menghapus komponen dari DOM sepenuhnya.) Tampaknya ini lebih cepat di toggling visibilitas menurut beberapa tes yang dilakukan oleh komentator di jawaban lain tetapi saya tidak bisa berbicara tentang itu.
Opsi 4: Satu komponen tetapi ubah Alat Peraga. Atau mungkin tidak ada komponen sama sekali dan cache HTML.
Yang ini tidak akan berfungsi untuk setiap aplikasi dan ini di luar topik karena ini bukan tentang menyembunyikan komponen, tetapi ini mungkin solusi yang lebih baik untuk beberapa kasus penggunaan daripada bersembunyi. Katakanlah Anda memiliki tab. Mungkin saja untuk menulis satu Komponen Bereaksi dan gunakan saja alat peraga untuk mengubah apa yang ditampilkan di tab. Anda juga bisa menyimpan JSX untuk menyatakan variabel dan menggunakan prop untuk memutuskan JSX mana yang akan kembali dalam fungsi render. Jika JSX harus dihasilkan kemudian lakukan dan cache di orangtua dan mengirim yang benar sebagai alat. Atau hasilkan di dalam child dan temboloklah dalam status child dan gunakan alat peraga untuk memilih yang aktif.
sumber
Ini adalah cara yang baik untuk menggunakan DOM virtual :
Contoh di sini
Menggunakan React hooks:
Contoh di sini
sumber
this.setState()
harus bergantung pada status masuk .Anda menetapkan nilai boolean di negara (mis. 'Tampilkan)', dan kemudian lakukan:
sumber
Praktik terbaik di bawah ini sesuai dengan dokumentasi:
Berikan elemen hanya ketika status valid.
sumber
sumber
sumber
Saya mulai dengan pernyataan ini dari tim Bereaksi:
Pada dasarnya Anda perlu menunjukkan komponen ketika tombol diklik, Anda dapat melakukannya dengan dua cara, menggunakan murni Bereaksi atau menggunakan CSS, menggunakan cara Bereaksi murni, Anda dapat melakukan sesuatu seperti kode di bawah ini dalam kasus Anda, jadi pada tahap pertama, hasilnya tidak menunjukkan sebagai
hideResults
adalahtrue
, tetapi dengan mengklik tombol, negara akan perubahan danhideResults
adalahfalse
dan mendapatkan komponen diberikan lagi dengan kondisi nilai baru, ini adalah penggunaan yang sangat umum mengubah tampilan komponen di Bereaksi ...Jika Anda ingin melakukan studi lebih lanjut dalam rendering bersyarat dalam Bereaksi, lihat di sini .
sumber
Contoh sembunyikan / tunjukkan sederhana dengan React Hooks: (srry about no fiddle)
sumber
Jika Anda ingin melihat cara TOGGLE tampilan komponen checkout biola ini.
http://jsfiddle.net/mnoster/kb3gN/16387/
sumber
Metode sederhana untuk menampilkan / menyembunyikan elemen dalam Bereaksi menggunakan Hooks
Sekarang, mari tambahkan beberapa logika ke metode render kami:
Dan
Kerja bagus.
sumber
Dalam beberapa kasus, komponen pesanan yang lebih tinggi mungkin berguna:
Buat komponen pesanan lebih tinggi:
Perpanjang komponen Anda sendiri:
Maka Anda dapat menggunakannya seperti ini:
Ini mengurangi pelat lantai sedikit dan memaksakan tetap pada konvensi penamaan, namun perlu diketahui bahwa MyComp masih akan dipakai - cara untuk menghilangkan disebutkan sebelumnya:
{ !hidden && <MyComp ... /> }
sumber
Gunakan modul rc-if-else
sumber
Salah satu caranya adalah menggunakan React's
ref
dan memanipulasi kelas CSS menggunakan API browser. Manfaatnya adalah untuk menghindari rerendering dalam Bereaksi jika satu-satunya tujuan adalah untuk menyembunyikan / menampilkan beberapa elemen DOM pada klik tombol.PS Perbaiki saya jika saya salah. :)
sumber
Jika Anda menggunakan bootstrap 4, Anda bisa menyembunyikan elemen dengan cara itu
sumber
Ini juga bisa dicapai seperti ini (cara yang sangat mudah)
sumber
contoh ini menunjukkan bagaimana Anda dapat beralih antar komponen dengan menggunakan toggle yang beralih setelah setiap 1sec
sumber
Gunakan sintaks ramping dan pendek ini:
sumber
Di sinilah solusi sederhana, efektif dan terbaik dengan Komponen Bereaksi Tanpa Kelas untuk menampilkan / menyembunyikan elemen. Penggunaan React-Hooks yang tersedia di proyek buat-reaksi-aplikasi terbaru yang menggunakan React 16
Selamat Coding :)
sumber
sumber
Anda dapat menggunakan file css
dan di file css
sumber
sumber
sumber
sumber
const
bukanvar
saat Anda mendeklarasikan konstanta.