关于ios:React Native – NSNumber无法转换为NSString

React Native - NSNumber cannot be converted to NSString

下面是我的反应组件的一部分。我有一个名为daysuntil的道具,它包含一个数字。在本例中,它将通过数字0,从而导致fontweight函数返回700

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
render: function() {
    return (
      <Text style={this.style()}>
       {this.props.day}
      </Text>
    )
  },
  style: function() {
    return {
      fontWeight: this.fontWeight()
    }
  },
  fontWeight: function() {
    var weight = 7 - this.props.daysUntil;
    return weight * 100;
  }

我得到以下错误:

JSON value '700' of type NSNumber cannot be converted to NSSTring.

我假设这是因为字体粗细要求值为字符串格式。正确的解决方法是什么?

提前谢谢!


在fontweight()函数中

1
return weight * 100;

也许变成:

1
2
var val= weight * 100;
return val.toString();

我遇到了一个类似的问题,我将一个图标而不是一个URI传递给一个图像。代码是用来接受icon = 'path/to/icon'的:

1
<Image source={{ uri: icon }}>

但我路过icon = require('path/to/icon'),不得不把JSX换成

1
<Image source={icon}>


fontweight需要一个字符串值,而不是整数。

只需确保返回一个字符串:

1
return (weight * 100).toString();

还要确保您的"权重"变量不等于零。


您可以使用来自react-native模块的StyleSheet,如下所示:

1
2
3
4
5
6
7
8
9
10
import StyleSheet from 'react-native'

// declare the styles using Stylesheet.create
const myStyles = StyleSheet.create({marginTop:30})

//... some code inside render method

<Text style={myStyles}>
        This is an example
</Text>

在react中,字体粗细应为字符串,

在React Doc中,他们特别提到fontWeight enum('normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900')
Specifies font weight. The values 'normal' and 'bold' are supported for most fonts. Not all fonts have a variant for each of the numeric values, in that case the closest one is chosen.

所以你可以选择如下

1
2
3
const boldText = {
  fontWeigth: '100'
}

1
2
3
const boldText = {
  fontWeight: 'bold'
}

在这段代码中你可以说

1
2
3
4
5
6
7
8
9
  style: function() {
    return {
      fontWeight: this.fontWeight()
    }
  },
  fontWeight: function() {
    var weight = 7 - this.props.daysUntil;
    return (weight * 100).toString();
  }