Apakah ada yang setara dengan CSS ini di React Native, sehingga aplikasi menggunakan font yang sama di mana-mana?
body {
font-family: 'Open Sans';
}
Menerapkannya secara manual pada setiap node Teks tampaknya terlalu rumit.
react-native
Dagobert Renouf
sumber
sumber
Jawaban:
Cara yang direkomendasikan adalah membuat komponen Anda sendiri, seperti MyAppText. MyAppText akan menjadi komponen sederhana yang membuat komponen Teks menggunakan gaya universal Anda dan dapat melewati props lain, dll.
https://facebook.github.io/react-native/docs/text.html#limited-style-inheritance
sumber
render()
sebagai pengganti konstruktor. Menggunakan pengaituseMemo
juga dapat membantu jika efisiensi itu penting. Alternatifnya, jika Anda ingin menyimpannya di konstruktor, penting untuk menambahkancomponentDidUpdate
logika yang diperbaruithis.style
saat komponen diperbarui karena gaya prop berubah.Baru-baru ini ada modul node yang dibuat yang memecahkan masalah ini sehingga Anda tidak perlu membuat komponen lain .
https://github.com/Ajackster/react-native-global-props
https://www.npmjs.com/package/react-native-global-props
Dokumentasi menyatakan bahwa dalam komponen urutan tertinggi Anda, impor
setCustomText
fungsi seperti itu.Kemudian, buat styling / props khusus yang Anda inginkan untuk komponen react-native
Text
. Dalam kasus Anda, Anda ingin fontFamily bekerja pada setiapText
komponen.Panggil
setCustomText
fungsi dan berikan properti / gaya Anda ke dalam fungsi.Dan kemudian semua
Text
komponen react-native akan memiliki fontFamily yang dideklarasikan bersama dengan props / styles lain yang Anda sediakan.sumber
<Text style={styles.text}>
?? Ini bukan solusi sempurna seperti itubody {font-family: 'Open Sans';}
punya solusi pembaruan ??Text style={styles.text}>
. Anda hanya perlu mendeklarasikan props kustom Anda di suatu tempat di aplikasi Anda dan itu akan diterapkan ke semua komponen Text Anda. Ini sangat mirip denganbody {font-family: ....}
Untuk React Native 0.56.0+, periksa apakah defaultProps ditentukan terlebih dahulu:
Kemudian tambahkan:
Tambahkan yang di atas dalam konstruktor file App.js (atau komponen root apa pun yang Anda miliki).
Untuk menimpa gaya, Anda dapat membuat objek gaya dan menyebarkannya kemudian menambahkan gaya tambahan Anda (mis.
{ ...baseStyle, fontSize: 16 }
)sumber
defaultProps
tidak ada ketika semua jawaban lain ditulis tetapi tampaknya inilah cara untuk melakukannya sekarang.style
prop, katakanlah, untuk mengubah gayaText
komponen tertentustyle
prop dalam komponen Text, font default akan diganti.Anda dapat mengganti perilaku Teks dengan menambahkan ini di salah satu komponen Anda menggunakan Teks:
Edit: sejak React Native 0.56,
Text.prototype
tidak berfungsi lagi. Anda perlu menghapus.prototype
:sumber
Dengan React-Native 0.56, metode pengubahan di atas
Text.prototype.render
tidak berfungsi lagi, jadi Anda harus menggunakan komponen Anda sendiri, yang bisa dilakukan dalam satu baris!MyText.js
export default props => <Text {...props} style={[{fontFamily: 'Helvetica'}, props.style]}>{props.children}</Text>
AnotherComponent.js
import Text from './MyText'; ... <Text>This will show in default font.</Text> ...
sumber
useRef
. reactjs.org/docs/hooks-reference.html#userefTambahkan fungsi ini ke
App
komponen root Anda dan kemudian jalankan dari konstruktor Anda setelah menambahkan font Anda menggunakan petunjuk ini. https://medium.com/react-native-training/react-native-custom-fonts-ccc9aacf9e5eimport {Text, TextInput} from 'react-native' SetDefaultFontFamily = () => { let components = [Text, TextInput] const customProps = { style: { fontFamily: "Rubik" } } for(let i = 0; i < components.length; i++) { const TextRender = components[i].prototype.render; const initialDefaultProps = components[i].prototype.constructor.defaultProps; components[i].prototype.constructor.defaultProps = { ...initialDefaultProps, ...customProps, } components[i].prototype.render = function render() { let oldProps = this.props; this.props = { ...this.props, style: [customProps.style, this.props.style] }; try { return TextRender.apply(this, arguments); } finally { this.props = oldProps; } }; } }
sumber
const App = StackNavigator({...})
dan diexport default App
mana tepatnya saya akan menempatkan kode ini karena saya rasa saya tidak dapat menggunakan konstruktor di sini?Sangat terlambat untuk utas ini tapi ini dia.
TLDR; Tambahkan blok berikut di
AppDelegate.m
Walkthrough dari seluruh aliran.
Beberapa cara Anda dapat melakukan ini di luar menggunakan plugin seperti
react-native-global-props
itu saya akan memandu Anda langkah demi langkah.Menambahkan font ke platform.
Bagaimana cara menambahkan font ke proyek IOS
Pertama, mari buat lokasi untuk aset kita. Mari buat direktori berikut di root kita.
``
``
Sekarang mari tambahkan NPM "React Native" di package.json kita
Sekarang kita dapat menjalankan "react-native link" untuk menambahkan aset kita ke aplikasi asli kita.
Memverifikasi atau melakukan secara manual.
Itu harus menambahkan nama font Anda ke dalam proyek
.plist
(untuk pengguna kode VS menjalankancode ios/*/Info.plist
untuk mengonfirmasi)Di sini anggap
Verlag
saja font yang Anda tambahkan, seharusnya terlihat seperti ini:Sekarang Anda telah memetakannya, sekarang mari pastikan mereka benar-benar ada dan dimuat (ini juga cara Anda melakukannya secara manual).
Pergi ke
"Build Phase" > "Copy Bundler Resource"
, Jika tidak berhasil, Anda akan menambahkannya secara manual di sini.Dapatkan Nama Font (dikenali oleh XCode)
Pertama buka log XCode Anda, seperti:
Kemudian Anda dapat menambahkan blok berikut
AppDelegate.m
ke dalam log nama Font dan Keluarga Font.Setelah Anda menjalankan Anda akan menemukan font Anda jika dimuat dengan benar, di sini kami menemukan font kami di log seperti ini:
Jadi sekarang kita tahu itu memuat
Verlag
keluarga dan merupakan font di dalam keluarga ituVerlag-Book
Verlag-BlackItalic
Verlag-BoldItalic
Verlag-XLight
Verlag-Bold
Verlag-Black
Verlag-XLightItalic
Verlag-LightItalic
Verlag-BookItalic
Verlag-Light
Ini sekarang adalah nama case sensitive yang dapat kita gunakan dalam keluarga font kita yang dapat kita gunakan di aplikasi react native kita.
Got -'em sekarang mengatur font default.
Kemudian untuk mengatur font default untuk menambahkan nama keluarga font Anda
AppDelegate.m
dengan baris iniSelesai.
sumber
Itu berhasil untuk saya: Tambahkan Font Kustom di React Native
unduh font Anda dan letakkan di folder aset / font, tambahkan baris ini di package.json
kemudian buka terminal dan jalankan perintah ini: react-native link
Sekarang Anda siap untuk pergi. Untuk langkah yang lebih detail. kunjungi tautan yang disebutkan di atas
sumber
Menambahkan
di
package.json
kemudian jalankanreact-native link
sumber
Setel di package.json
Dan link react-native link
sumber