web-dev-qa-db-fra.com

React Native - Le NSNumber ne peut pas être converti en NSString

Ci-dessous une partie de mon composant de réaction. J'ai un accessoire nommé daysUntil à venir dans ce composant qui contient un nombre. Dans cet exemple, nous passons le nombre 0, ce qui a pour résultat que la fonction fontWeight renvoie 700

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;
  }

Je reçois l'erreur suivante:

La valeur JSON '700' de type NSNumber ne peut pas être convertie en NSSTring.

Je suppose que c'est parce que font-weight s'attend à ce que la valeur soit au format chaîne. Quelle est la solution appropriée pour cela?

Merci d'avance!

8
Sohrab Hejazi

Dans votre fonction fontWeight () 

return weight * 100;

devient peut-être:

var val= weight * 100;
return val.toString();
16
Robert Moskal

fontWeight requiert une valeur de chaîne et non un entier.

Assurez-vous simplement de renvoyer une chaîne:

return (weight * 100).toString();

Assurez-vous également que votre variable "poids" n'est pas égale à zéro.

2
Leon

J'ai eu un problème similaire, où je passais dans une icône au lieu d'un uri à une image. Le code a été écrit pour accepter icon = 'path/to/icon':

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

mais je passais dans icon = require('path/to/icon') et je devais passer le jsx à

<Image source={icon}>
1
ehacinom

Vous pouvez utiliser le module StyleSheet à partir du module react-native, comme ceci:

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>
1
ismnoiet

en réaction le poids de la police doit être une chaîne, 

dans le document de réaction, ils ont spécifiquement mentionné que 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.

afin que vous puissiez choisir comme suit 

const boldText = {
  fontWeigth: '100'
}

ou 

const boldText = {
  fontWeight: 'bold'
}

dans ce code, vous pouvez dire

  style: function() {
    return {
      fontWeight: this.fontWeight()
    }
  },
  fontWeight: function() {
    var weight = 7 - this.props.daysUntil;
    return (weight * 100).toString();
  }
0
NuOne T Attygalle