2016-05-04 19 views
5

Desidero aggiornare direttamente il valore di un componente per motivi di prestazioni.setNativeProps Cambia valore per il componente del testo Reagire Manipolazione diretta nativa

render(){ 

<View> 

<Text style={styles.welcome} ref={component => this._text = component}> 
    Some Text 
</Text> 

<TouchableHighlight underlayColor='#88D4F5' 
       style={styles.button}> 
      <View>  
      <Text style={styles.buttonText} 
       onPress={this.useNativePropsToUpdate.bind(this)}> 
       Iam the Child 
      </Text> 
      </View> 
</TouchableHighlight> 

</View> 
} 

Questo è il metodo che utilizzo per aggiornare il componente di testo. Non so se sto impostando l'attributo destra/come capire quale attribuire a impostare:

useNativePropsToUpdate(){ 
    this._text.setNativeProps({text: 'Updated using native props'}); 
    } 

Essenzialmente cercando di seguire lo stesso approccio da questo esempio: https://rnplay.org/plays/pOI9bA

Edit: quando tento assegnare esplicitamente il valore aggiornato:

this._text.props.children = "updated"; 

(So che questo è il modo corretto di fare le cose in RN). Ho ricevuto l'errore "Impossibile assegnare a sola lettura proprietà" figli "dell'oggetto" # ""

Quindi forse questo è il motivo per cui non può essere aggiornato in RN per qualche motivo?

+0

usare un 'TextInput' invece e impostare il valore con' this._text.setNativeProps ({text: '! Hi There'}) '. –

risposta

3

Invece di tentare di modificare il contenuto del componente <Text>. Ho appena sostituito con <TextInput editable={false} defaultValue={this.state.initValue} /> e ho mantenuto il resto del codice lo stesso. Se qualcuno sa come è possibile modificare il valore di <Text> utilizzando setNativeProps o altro metodo di manipolazioni dirette. Pubblica la risposta e controlla male e accetta.

+1

Non è possibile manipolare direttamente un '' perché utilizza un 'NSTextStorage' e non una proprietà' NSString'. Controlla questo: https://github.com/facebook/react-native/blob/master/Libraries/Text/RCTText.h#L15 Se c'era un modo per convertire un valore stringa in un valore 'NSTextStorage' , quindi potremmo anche manipolare il campo di testo, ma a mia conoscenza non possiamo. – SudoPlz

3

tag Il testo non ha un puntello text, così

this._text.setNativeProps({ text: 'XXXX' }) 

non funziona.

Ma il tag testo ha un puntello style, così

this._text.setNativeProps({ style: { color: 'red' } }) 

opere.

0

Poiché setNativeProps non risolve lo scopo di modificare il contenuto di <Text />, ho utilizzato l'approccio in basso e funziona correttamente. Creare semplici Reagire Component come qui di seguito ...

var Txt = React.createClass({ 
getInitialState:function(){ 
    return {text:this.props.children}; 
},setText:function(txt){ 
    this.setState({text:txt}); 
} 
, 
render:function(){ 
    return <Text {...this.props}>{this.state.text}</Text> 
} 
}); 
+0

Intendevi 'var Text' o' return

Problemi correlati