React Native 0.18.1在所有视图上使用自定义字体

时间:2016-01-26 16:30:09

标签: javascript fonts react-native

我刚刚升级到RN 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属性”。有关如何使用自定义字体的任何想法吗?

1 个答案:

答案 0 :(得分: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;