Necesito cambiar la función de procesamiento y ejecutar alguna función de procesamiento secundario cuando se da un estado específico,
Por ejemplo:
render() { return ( <View style={styles.container}> if (this.state == 'news'){ return ( <Text>data</Text> ) } </View> ) }¿Cómo puedo implementar eso sin cambiar de escena? Usaré pestañas para cambiar el contenido dinámicamente.
Según DOC :
Las declaraciones if-else no funcionan dentro de JSX. Esto se debe a que JSX es solo azúcar sintáctico para llamadas a funciones y construcción de objetos.
Regla básica:
JSX es fundamentalmente azúcar sintáctico . Después de la compilación, las expresiones JSX se convierten en llamadas de función de JavaScript regulares y se evalúan como objetos de JavaScript. Podemos incrustar cualquier expresión de JavaScript en JSX envolviéndola entre llaves.
Pero solo expresiones, no declaraciones, significa directamente que no podemos poner ninguna declaración ( if-else/switch/for ) dentro de JSX .
Si desea representar el elemento condicionalmente, use el ternary operator , así:
render() { return ( <View style={styles.container}> {this.state.value == 'news'? <Text>data</Text>: null } </View> ) } Otra opción es llamar a una función desde jsx y poner toda la lógica if-else dentro de ella, así:
renderElement(){ if(this.state.value == 'news') return <Text>data</Text>; return null; } render() { return ( <View style={styles.container}> { this.renderElement() } </View> ) }Puede lograr lo que dice utilizando la expresión de función invocada inmediatamente (IIFE)
render() { return ( <View style={styles.container}> {(() => { if (this.state == 'news'){ return ( <Text>data</Text> ) } return null; })()} </View> ) }Aquí está el ejemplo de trabajo:
Pero, en su caso, puede quedarse con el operador ternario
Creo que esta forma es la mejor:
{this.state.yourVariable === 'news' && <Text>{data}<Text/>}