Czy istnieje odpowiednik tego CSS w React Native, aby aplikacja wszędzie używała tej samej czcionki?
body {
font-family: 'Open Sans';
}
Ręczne stosowanie go w każdym węźle tekstowym wydaje się zbyt skomplikowane.
react-native
Dagobert Renouf
źródło
źródło
Odpowiedzi:
Zalecanym sposobem jest utworzenie własnego komponentu, takiego jak MyAppText. MyAppText byłby prostym komponentem, który renderuje komponent Text przy użyciu Twojego uniwersalnego stylu i może przechodzić przez inne rekwizyty itp.
https://facebook.github.io/react-native/docs/text.html#limited-style-inheritance
źródło
render()
zamiast konstruktora. Używanie haków zuseMemo
może również pomóc, jeśli ważna jest wydajność. Alternatywnie, jeśli chcesz zachować go w konstruktorze, ważne jest, aby dodaćcomponentDidUpdate
logikę, która aktualizuje się,this.style
gdy składnik aktualizuje się z powodu zmiany właściwości stylu.Niedawno powstał moduł węzła, który rozwiązuje ten problem, więc nie trzeba tworzyć kolejnego komponentu .
https://github.com/Ajackster/react-native-global-props
https://www.npmjs.com/package/react-native-global-props
Dokumentacja stwierdza, że w komponencie najwyższego rzędu zaimportuj
setCustomText
funkcję w ten sposób.Następnie utwórz własne style / rekwizyty, które chcesz dla
Text
komponentu reagującego . W Twoim przypadku chcesz, aby fontFamily działał na każdymText
komponencie.Wywołaj
setCustomText
funkcję i przekaż swoje właściwości / style do funkcji.A następnie wszystkie
Text
komponenty typu act -native będą miały zadeklarowaną przez Ciebie czcionkę fontFamily wraz z innymi podanymi właściwościami / stylami.źródło
<Text style={styles.text}>
? To nie jest idealne rozwiązanie, takie jak to, czybody {font-family: 'Open Sans';}
masz jakieś rozwiązanie do aktualizacji?Text style={styles.text}>
. Musisz tylko zadeklarować swoje własne właściwości gdzieś w aplikacji, a zostaną one zastosowane do wszystkich komponentów Text. Jest bardzo podobny dobody {font-family: ....}
Dla React Native 0.56.0+ sprawdź, czy defaultProps jest zdefiniowane jako pierwsze:
Następnie dodaj:
Dodaj powyższe do konstruktora pliku App.js (lub dowolnego posiadanego komponentu głównego).
Aby nadpisać styl, możesz utworzyć obiekt stylu i rozszerzyć go, a następnie dodać swój dodatkowy styl (np.
{ ...baseStyle, fontSize: 16 }
)źródło
defaultProps
nie istniało, gdy wszystkie inne odpowiedzi zostały napisane, ale wydaje się, że teraz jest to sposób na zrobienie tego.style
rekwizyt, powiedzmy, aby dostosować style poszczególnychText
komponentówstyle
w komponencie Tekst, domyślna czcionka zostanie zastąpiona.Możesz nadpisać zachowanie Tekst, dodając to w dowolnym komponencie za pomocą Tekst:
Edycja: od React Native 0.56
Text.prototype
już nie działa. Musisz usunąć.prototype
:źródło
W przypadku React-Native 0.56 powyższa metoda zmiany
Text.prototype.render
już nie działa, więc musisz użyć własnego komponentu, co można zrobić w jednej linii!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> ...
źródło
useRef
. actjs.org/docs/hooks-reference.html#userefDodaj tę funkcję do
App
komponentu głównego , a następnie uruchom ją z konstruktora po dodaniu czcionki zgodnie z tymi instrukcjami. 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; } }; } }
źródło
const App = StackNavigator({...})
iexport default App
gdzie dokładnie powinienem umieścić ten kod, ponieważ nie sądzę, żebym mógł tu użyć konstruktora?Bardzo późno do tego wątku, ale proszę bardzo.
TLDR; Dodaj następujący blok do swojego
AppDelegate.m
Przejście całego przepływu.
Na kilka sposobów możesz to zrobić poza używaniem wtyczki, takiej jak ta
react-native-global-props
, którą przeprowadzę Cię krok po kroku.Dodawanie czcionek do platform.
Jak dodać czcionkę do projektu IOS
Najpierw stwórzmy lokalizację dla naszych aktywów. Zróbmy następujący katalog w naszym katalogu głównym.
`` ''
`` ''
Teraz dodajmy NPM „React Native” do naszego package.json
Teraz możemy uruchomić „łącze do natywnego reagowania”, aby dodać nasze zasoby do naszych natywnych aplikacji.
Weryfikacja lub wykonanie ręczne.
To powinno dodać nazwy czcionek do projektów
.plist
(dla użytkowników kodu VS uruchomionych wcode ios/*/Info.plist
celu potwierdzenia)Tutaj załóżmy, że
Verlag
dodana czcionka powinna wyglądać mniej więcej tak:Teraz, gdy je zmapowałeś, upewnijmy się, że faktycznie tam są i są ładowane (tak też zrobiłbyś to ręcznie).
Idź do
"Build Phase" > "Copy Bundler Resource"
, jeśli to nie zadziałało, ręcznie dodasz pod nimi tutaj.Pobierz nazwy czcionek (rozpoznawane przez XCode)
Najpierw otwórz swoje dzienniki XCode, takie jak:
Następnie możesz dodać następujący blok do swojego,
AppDelegate.m
aby rejestrować nazwy czcionek i rodziny czcionek.Po uruchomieniu powinieneś znaleźć swoje czcionki, jeśli zostały poprawnie załadowane, tutaj znaleźliśmy nasze w dziennikach takich jak ten:
Więc teraz wiemy, że załadował
Verlag
rodzinę i czy są czcionkami wewnątrz tej rodzinyVerlag-Book
Verlag-BlackItalic
Verlag-BoldItalic
Verlag-XLight
Verlag-Bold
Verlag-Black
Verlag-XLightItalic
Verlag-LightItalic
Verlag-BookItalic
Verlag-Light
Są to teraz nazwy z uwzględnieniem wielkości liter, których możemy używać w naszej rodzinie czcionek, których możemy używać w naszej natywnej aplikacji React.
Got -'em teraz ustaw domyślną czcionkę.
Następnie, aby ustawić domyślną czcionkę, aby dodać nazwę rodziny czcionek w
AppDelegate.m
tym wierszuGotowe.
źródło
U mnie to działa: dodaj niestandardową czcionkę w React Native
pobierz swoje czcionki i umieść je w folderze asset / fonts, dodaj ten wiersz do pliku package.json
następnie otwórz terminal i uruchom polecenie: Reaguj-natywny link
Teraz możesz już iść. Aby uzyskać bardziej szczegółowy krok. odwiedź powyższy link
źródło
Dodaj
w
package.json
to biegnijreact-native link
źródło
Ustaw w package.json
I link reaguj-natywny link
źródło