Beim Reagieren oder Reagieren nativ funktioniert die Art und Weise, wie Komponenten ausgeblendet / angezeigt oder hinzugefügt / entfernt werden, nicht wie in Android oder iOS. Die meisten von uns denken, dass es eine ähnliche Strategie geben würde
View.hide = true or parentView.addSubView(childView)
Die Art und Weise, wie einheimische Arbeiten reagieren, ist jedoch völlig anders. Die einzige Möglichkeit, diese Art von Funktionalität zu erreichen, besteht darin, Ihre Komponente in Ihr DOM aufzunehmen oder aus dem DOM zu entfernen.
Hier in diesem Beispiel werde ich die Sichtbarkeit der Textansicht basierend auf dem Klick auf die Schaltfläche einstellen.
Die Idee hinter dieser Aufgabe ist das Erstellen einer Statusvariablen namens state, bei der der Anfangswert auf false gesetzt ist, wenn das Ereignis zum Klicken auf die Schaltfläche auftritt, und der Wert dann umgeschaltet wird. Jetzt werden wir diese Statusvariable während der Erstellung der Komponente verwenden.
import renderIf from './renderIf'
class FetchSample extends Component {
constructor(){
super();
this.state ={
status:false
}
}
toggleStatus(){
this.setState({
status:!this.state.status
});
console.log('toggle button handler: '+ this.state.status);
}
render() {
return (
<View style={styles.container}>
{renderIf(this.state.status)(
<Text style={styles.welcome}>
I am dynamic text View
</Text>
)}
<TouchableHighlight onPress={()=>this.toggleStatus()}>
<Text>
touchme
</Text>
</TouchableHighlight>
</View>
);
}
}
Das einzige, was in diesem Snippet zu bemerken ist renderIf
, ist, dass es sich tatsächlich um eine Funktion handelt, die die an sie übergebene Komponente basierend auf dem an sie übergebenen booleschen Wert zurückgibt.
renderIf(predicate)(element)
renderif.js
'use strict';
const isFunction = input => typeof input === 'function';
export default predicate => elemOrThunk =>
predicate ? (isFunction(elemOrThunk) ? elemOrThunk() : elemOrThunk) : null;