Saya menginisialisasi i18n
objek terjemahan sekali dalam sebuah komponen (komponen pertama yang dimuat dalam aplikasi). Objek yang sama diperlukan di semua komponen lainnya. Saya tidak ingin menginisialisasi ulang di setiap komponen. Bagaimana jalannya? Membuatnya tersedia untuk lingkup jendela tidak membantu karena saya perlu menggunakannya dalam render()
metode.
Harap sarankan solusi umum untuk masalah ini dan bukan solusi khusus i18n.
Redux
atauFlux
pustaka yang dapat menangani data atau status secara global. dan Anda dapat melewatinya dengan mudah melalui semua komponen AndaJawaban:
Mengapa Anda tidak mencoba menggunakan Konteks ?
Anda dapat mendeklarasikan variabel konteks global di salah satu komponen induk dan variabel ini akan dapat diakses di seluruh pohon komponen dengan
this.context.varname
. Anda hanya perlu menentukanchildContextTypes
dangetChildContext
dalam komponen induk dan setelah itu Anda dapat menggunakan / memodifikasi ini dari komponen manapun dengan hanya menentukancontextTypes
di komponen anak.Namun, harap perhatikan ini seperti yang disebutkan dalam dokumen:
sumber
Beyond React
Anda mungkin tidak menyadari bahwa impor sudah bersifat global . Jika Anda mengekspor objek (tunggal), objek tersebut dapat diakses secara global sebagai pernyataan impor dan juga dapat dimodifikasi secara global .
Jika Anda ingin menginisialisasi sesuatu secara global tetapi memastikannya hanya dimodifikasi sekali, Anda dapat menggunakan pendekatan tunggal ini yang awalnya memiliki properti yang dapat dimodifikasi tetapi kemudian Anda dapat menggunakannya
Object.freeze
setelah penggunaan pertama untuk memastikannya tidak dapat diubah dalam skenario init Anda.lalu dalam metode init Anda mereferensikannya:
Surat
myInitObject
wasiat masih bersifat global karena dapat dirujuk di mana saja sebagai impor tetapi akan tetap dibekukan dan dibuang jika ada yang mencoba untuk memodifikasinya.Jika menggunakan react-create-app
(Apa yang saya cari sebenarnya) Dalam skenario ini Anda juga dapat menginisialisasi objek global dengan rapi saat mereferensikan variabel lingkungan.
Membuat file .env di root proyek Anda dengan
REACT_APP_
variabel awalan di dalamnya cukup berhasil. Anda dapat mereferensikan dalam JS dan JSXprocess.env.REACT_APP_SOME_VAR
sesuai kebutuhan DAN tidak dapat diubah menurut desain.Ini menghindari harus mengatur
window.myVar = %REACT_APP_MY_VAR%
dalam HTML.Lihat detail yang lebih berguna tentang ini dari Facebook secara langsung:
https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables
sumber
Tidak disarankan tetapi .... Anda dapat menggunakan componentWillMount dari kelas aplikasi Anda untuk menambahkan variabel global Anda melaluinya ... mirip seperti ini:
masih menganggap ini hack ... tetapi itu akan menyelesaikan pekerjaan Anda
btw componentWillMount dijalankan satu kali sebelum rendering, lihat selengkapnya di sini: https://reactjs.org/docs/react-component.html#mounting-componentwillmount
sumber
componentWillMount
tidak digunakan lagi: reactjs.org/blog/2018/03/27/update-on-async-rendering.htmlBuat file bernama "config.js" di folder ./src dengan konten ini:
Di file utama Anda "index.js" letakkan baris ini:
Di mana pun Anda membutuhkan objek, gunakan ini:
sumber
Dapat menyimpan variabel global di webpack yaitu di
webpack.config.js
Dalam modul js bisa dibaca seperti
Semoga ini bisa membantu.
sumber
Cara terbaik yang saya temukan sejauh ini adalah dengan menggunakan React Context tetapi mengisolasinya di dalam komponen penyedia tingkat tinggi .
sumber
Anda dapat menggunakan mixin dalam bereaksi https://facebook.github.io/react/docs/reusable-components.html#mixins .
sumber
Ini adalah pendekatan modern, menggunakan
globalThis
, kami mengambil untuk aplikasi React Native kami .globalThis
sekarang termasuk dalam ...appGlobals.ts
App.tsx ( file titik masuk utama kami )
anyWhereElseInTheApp.tsx
sumber
Saya tidak tahu apa yang mereka coba katakan dengan hal-hal "Konteks Bereaksi" - mereka berbicara bahasa Yunani, bagi saya, tapi begini cara saya melakukannya:
Membawa nilai antar fungsi, di halaman yang sama
Dalam konstruktor Anda, ikat penyetel Anda:
Kemudian nyatakan fungsi tepat di bawah konstruktor Anda:
Saat Anda ingin menyetelnya, panggil
this.setSomeVariable("some value");
(Anda bahkan mungkin bisa lolos dengan
this.state.myProperty = "some value";
)Jika Anda ingin mendapatkannya, telepon
var myProp = this.state.myProperty;
Menggunakan
alert(myProp);
seharusnya memberi Andasome value
.Metode perancah ekstra untuk membawa nilai di seluruh halaman / komponen
Anda dapat menetapkan model ke
this
(secara teknisthis.stores
), sehingga Anda dapat mereferensikannya denganthis.state
:Simpan ini ke folder bernama
stores
sebagaiyourForm.jsx
.Kemudian Anda dapat melakukan ini di halaman lain:
Jika Anda telah mengatur
this.state.someGlobalVariable
komponen lain menggunakan fungsi seperti:yang Anda ikat dalam konstruktor dengan:
nilai dalam
propertyTextToAdd
akan ditampilkan denganSomePage
menggunakan kode yang ditunjukkan di atas.sumber