Có tương đương với CSS này trong React Native để ứng dụng sử dụng cùng một phông chữ ở mọi nơi không?
body {
font-family: 'Open Sans';
}
Việc áp dụng nó theo cách thủ công trên mọi nút Văn bản có vẻ quá phức tạp.
Có tương đương với CSS này trong React Native để ứng dụng sử dụng cùng một phông chữ ở mọi nơi không?
body {
font-family: 'Open Sans';
}
Việc áp dụng nó theo cách thủ công trên mọi nút Văn bản có vẻ quá phức tạp.
Câu trả lời:
Cách được khuyến nghị là tạo thành phần của riêng bạn, chẳng hạn như MyAppText. MyAppText sẽ là một thành phần đơn giản hiển thị thành phần Văn bản bằng cách sử dụng kiểu phổ quát của bạn và có thể chuyển qua các đạo cụ khác, v.v.
https://facebook.github.io/react-native/docs/text.html#limited-style-inheritance
render()
thay vì hàm tạo. Sử dụng móc với useMemo
cũng có thể hữu ích nếu hiệu quả là quan trọng. Ngoài ra, nếu bạn muốn giữ nó trong phương thức khởi tạo, điều quan trọng là phải thêm một componentDidUpdate
logic cập nhật this.style
khi thành phần cập nhật do thay đổi kiểu hỗ trợ.
Gần đây có một mô-đun nút đã được tạo ra để giải quyết vấn đề này, do đó bạn không phải tạo một thành phần khác .
https://github.com/Ajackster/react-native-global-props
https://www.npmjs.com/package/react-native-global-props
Tài liệu nói rằng trong thành phần thứ tự cao nhất của bạn, hãy nhập setCustomText
hàm như vậy.
import { setCustomText } from 'react-native-global-props';
Sau đó, tạo kiểu / đạo cụ tùy chỉnh bạn muốn cho Text
thành phần gốc phản ứng . Trong trường hợp của bạn, bạn muốn fontFamily hoạt động trên mọi Text
thành phần.
const customTextProps = {
style: {
fontFamily: yourFont
}
}
Gọi setCustomText
hàm và chuyển đạo cụ / kiểu của bạn vào hàm.
setCustomText(customTextProps);
Và sau đó tất cả các Text
thành phần gốc phản ứng sẽ có fontFamily được khai báo của bạn cùng với bất kỳ đạo cụ / kiểu nào khác mà bạn cung cấp.
<Text style={styles.text}>
?? Nó không phải là giải pháp hoàn hảo như vậy body {font-family: 'Open Sans';}
có giải pháp cập nhật nào không ??
Text style={styles.text}>
. Bạn chỉ cần khai báo các đạo cụ tùy chỉnh của mình ở đâu đó trong ứng dụng của bạn và nó sẽ được áp dụng cho tất cả các thành phần Văn bản của bạn. Nó rất giống vớibody {font-family: ....}
Đối với React Native 0.56.0+, hãy kiểm tra xem defaultProps có được xác định trước không:
Text.defaultProps = Text.defaultProps || {}
Sau đó thêm:
Text.defaultProps.style = { fontFamily: 'some_font' }
Thêm phần trên vào hàm tạo của tệp App.js (hoặc bất kỳ thành phần gốc nào bạn có).
Để ghi đè kiểu, bạn có thể tạo một đối tượng kiểu và trải nó, sau đó thêm kiểu bổ sung của bạn (ví dụ { ...baseStyle, fontSize: 16 }
:)
defaultProps
câu trả lời không tồn tại khi tất cả các câu trả lời khác đã được viết ra nhưng đây dường như là cách để làm điều đó bây giờ.
style
prop, chẳng hạn, để tinh chỉnh phong cách của riêng Text
linh kiện
style
hỗ trợ trong thành phần Văn bản, phông chữ mặc định sẽ được thay thế.
Bạn có thể ghi đè hành vi Văn bản bằng cách thêm hành vi này vào bất kỳ thành phần nào của mình bằng Văn bản:
let oldRender = Text.prototype.render;
Text.prototype.render = function (...args) {
let origin = oldRender.call(this, ...args);
return React.cloneElement(origin, {
style: [{color: 'red', fontFamily: 'Arial'}, origin.props.style]
});
};
Chỉnh sửa: kể từ khi React Native 0.56, Text.prototype
không hoạt động nữa. Bạn cần loại bỏ .prototype
:
let oldRender = Text.render;
Text.render = function (...args) {
let origin = oldRender.call(this, ...args);
return React.cloneElement(origin, {
style: [{color: 'red', fontFamily: 'Arial'}, origin.props.style]
});
};
Thêm vào
"rnpm": {
"assets": [
"./assets/fonts/"
]
}
trong package.json
sau đó chạyreact-native link
Với React-Native 0.56, phương pháp thay đổi ở trên Text.prototype.render
không hoạt động nữa, vì vậy bạn phải sử dụng thành phần của riêng mình, có thể được thực hiện trong một dòng!
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>
...
useRef
. reactjs.org/docs/hooks-reference.html#useref
Thêm chức năng này vào App
thành phần gốc của bạn và sau đó chạy nó từ phương thức khởi tạo của bạn sau khi thêm phông chữ của bạn bằng cách sử dụng các hướng dẫn này. https://medium.com/react-native-training/react-native-custom-fonts-ccc9aacf9e5e
import {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;
}
};
}
}
const App = StackNavigator({...})
và export default App
chính xác thì tôi sẽ đặt mã này ở đâu vì tôi không nghĩ rằng mình có thể sử dụng hàm tạo ở đây?
Quá muộn với chủ đề này nhưng đây vẫn tiếp tục.
TLDR; Thêm khối sau vàoAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
// HERE: replace "Verlag" with your font
[[UILabel appearance] setFont:[UIFont fontWithName:@"Verlag" size:17.0]];
....
}
Một số cách bạn có thể làm điều này ngoài việc sử dụng một plugin như react-native-global-props
vậy Tôi sẽ hướng dẫn bạn từng bước một.
Đầu tiên, hãy tạo một vị trí cho nội dung của chúng tôi. Hãy tạo thư mục sau tại thư mục gốc của chúng tôi.
``
ios/
static/
fonts/
``
Bây giờ, hãy thêm NPM "React Native" trong package.json của chúng tôi
"rnpm": {
"static": [
"./static/fonts/"
]
}
Giờ đây, chúng tôi có thể chạy "liên kết gốc phản ứng" để thêm nội dung vào ứng dụng gốc của mình.
Điều đó sẽ thêm tên phông chữ của bạn vào các dự án .plist
(đối với người dùng mã VS chạy code ios/*/Info.plist
để xác nhận)
Ở đây, hãy giả sử Verlag
là phông chữ bạn đã thêm, nó sẽ trông giống như sau:
<dict>
<plist>
.....
<key>UIAppFonts</key>
<array>
<string>Verlag Bold Italic.otf</string>
<string>Verlag Book Italic.otf</string>
<string>Verlag Light.otf</string>
<string>Verlag XLight Italic.otf</string>
<string>Verlag XLight.otf</string>
<string>Verlag-Black.otf</string>
<string>Verlag-BlackItalic.otf</string>
<string>Verlag-Bold.otf</string>
<string>Verlag-Book.otf</string>
<string>Verlag-LightItalic.otf</string>
</array>
....
</dict>
</plist>
Bây giờ bạn đã ánh xạ chúng, bây giờ hãy đảm bảo rằng chúng thực sự ở đó và đang được tải (đây cũng là cách bạn thực hiện theo cách thủ công).
Đi tới "Build Phase" > "Copy Bundler Resource"
, Nếu nó không hoạt động, bạn sẽ thêm thủ công vào bên dưới chúng tại đây.
Trước tiên, hãy mở nhật ký XCode của bạn, như:
Sau đó, bạn có thể thêm khối sau vào của bạn AppDelegate.m
để ghi tên của Phông chữ và Họ Phông chữ.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
.....
for (NSString* family in [UIFont familyNames])
{
NSLog(@"%@", family);
for (NSString* name in [UIFont fontNamesForFamilyName: family])
{
NSLog(@" %@", name);
}
}
...
}
Sau khi chạy, bạn sẽ tìm thấy phông chữ của mình nếu được tải đúng cách, ở đây chúng tôi đã tìm thấy các phông chữ của chúng tôi trong các nhật ký như sau:
2018-05-07 10:57:04.194127-0700 MyApp[84024:1486266] Verlag
2018-05-07 10:57:04.194266-0700 MyApp[84024:1486266] Verlag-Book
2018-05-07 10:57:04.194401-0700 MyApp[84024:1486266] Verlag-BlackItalic
2018-05-07 10:57:04.194516-0700 MyApp[84024:1486266] Verlag-BoldItalic
2018-05-07 10:57:04.194616-0700 MyApp[84024:1486266] Verlag-XLight
2018-05-07 10:57:04.194737-0700 MyApp[84024:1486266] Verlag-Bold
2018-05-07 10:57:04.194833-0700 MyApp[84024:1486266] Verlag-Black
2018-05-07 10:57:04.194942-0700 MyApp[84024:1486266] Verlag-XLightItalic
2018-05-07 10:57:04.195170-0700 MyApp[84024:1486266] Verlag-LightItalic
2018-05-07 10:57:04.195327-0700 MyApp[84024:1486266] Verlag-BookItalic
2018-05-07 10:57:04.195510-0700 MyApp[84024:1486266] Verlag-Light
Vì vậy, bây giờ chúng tôi biết nó đã tải Verlag
họ và các phông chữ bên trong họ đó
Verlag-Book
Verlag-BlackItalic
Verlag-BoldItalic
Verlag-XLight
Verlag-Bold
Verlag-Black
Verlag-XLightItalic
Verlag-LightItalic
Verlag-BookItalic
Verlag-Light
Đây là những tên phân biệt chữ hoa chữ thường mà chúng ta có thể sử dụng trong họ phông chữ của mình, chúng ta có thể sử dụng trong ứng dụng gốc phản ứng của mình.
Sau đó, để đặt một phông chữ mặc định để thêm họ phông chữ của bạn vào AppDelegate.m
với dòng này
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
....
// ADD THIS LINE (replace "Verlag" with your font)
[[UILabel appearance] setFont:[UIFont fontWithName:@"Verlag" size:17.0]];
....
}
Làm xong.
Điều đó phù hợp với tôi: Thêm phông chữ tùy chỉnh trong React Native
tải xuống phông chữ của bạn và đặt chúng trong thư mục tài sản / phông chữ, thêm dòng này vào package.json
"rnpm": {
"assets": ["assets/fonts/Sarpanch"]}
sau đó mở terminal và chạy lệnh này: react-native link
Bây giờ bạn đã tốt để đi. Để biết thêm bước chi tiết. truy cập liên kết ở trên được đề cập