2016-01-26 3 views
3

Я только что обновил до 0.18.1 RN, и способ, которым я работал с пользовательскими шрифтами в моем приложении, больше не работает. Есть ли обходной путь?React Native 0.18.1 использовать пользовательский шрифт во всех представлениях

Я использовал, чтобы сделать это:

import React, {AppRegistry, Component, StyleSheet, Text, View, TextInput} from 'react-native'; 

var OldText = Text; 

class NewText extends OldText { 
    defaultProps = { 
    customFont: false 
    }; 

    render() { 
    var props = _.clone(this.props); 

    if (this.props.customFont) { 
     return super.render(); 
    } 

    if (_.isArray(this.props.style)){ 
     props.style.push({fontFamily: 'Quicksand-Regular'}); 
    } else if (props.style) { 
     props.style = [props.style, {fontFamily: 'Quicksand-Regular'}]; 
    } else { 
     props.style = {fontFamily: 'Quicksand-Regular'}; 
    } 

    this.props = props; 

    return super.render(); 
    } 
}; 

React.Text = NewText; 

Теперь на этой последней строке React.Text = NewText, я получаю ошибку: «Покушение присвоить ReadOnly свойство». Любые мысли о том, как использовать пользовательские шрифты сейчас?

+0

Вы можете экспортировать NewText и использовать вместо всей рендеринге методов, но это не совсем так аккуратно, как то, что вы делали. –

+0

Да, это то, что я думал, но мне было интересно, был ли какой-нибудь другой способ «чище». Я думаю, что способ сделать это - добавить шрифт в стиль каждого тега Text, но это займет некоторое время. –

+0

Документы «повторно используемые компоненты» предлагают подклассирование для достижения этого, то есть с использованием компонента . Я создал компоненты Text для каждого из стилей шрифта, используемых в приложении (TextHeader, TextInfo и т. Д.). –

ответ

0

Спасибо @Ben Clayton за этот ответ. Правильный способ сделать это сейчас - создать новый компонент (NewText), например, который является подклассом React.Text и использовать его вместо всего приложения.

Мой NewText выглядит следующим образом:

'use strict'; 

import React, {Text} from 'react-native'; 

import _ from 'lodash'; 

class NewText extends Text { 
    defaultProps = { 
    customFont: false 
    }; 

    render() { 
    var props = _.clone(this.props); 

    if (this.props.customFont) { 
     return super.render(); 
    } 

    if (_.isArray(this.props.style)){ 
     props.style.push({fontFamily: 'Quicksand-Regular'}); 
    } else if (props.style) { 
     props.style = [props.style, {fontFamily: 'Quicksand-Regular'}]; 
    } else { 
     props.style = {fontFamily: 'Quicksand-Regular'}; 
    } 

    this.props = props; 

    return super.render(); 
    } 
}; 

export default NewText;