Reagując lub reaguj natywnie, sposób, w jaki komponent ukryj / pokaż lub dodaj / usuń nie działa jak w systemie Android lub iOS. Większość z nas uważa, że byłaby podobna strategia
View.hide = true or parentView.addSubView(childView)
Ale sposób, w jaki reagują na rodzime prace, jest zupełnie inny. Jedynym sposobem osiągnięcia tego rodzaju funkcjonalności jest włączenie komponentu do DOM lub usunięcie z DOM.
W tym przykładzie ustawię widoczność widoku tekstu na podstawie kliknięcia przycisku.
Ideą tego zadania jest utworzenie zmiennej stanu o nazwie stan, której wartość początkowa jest ustawiona na fałsz, gdy nastąpi zdarzenie kliknięcia przycisku, a następnie zostanie przełączona. Teraz użyjemy tej zmiennej stanu podczas tworzenia komponentu.
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>
);
}
}
jedyną rzeczą, na którą należy zwrócić uwagę w tym fragmencie, jest fakt, że jest renderIf
to funkcja, która zwróci przekazany jej komponent na podstawie przekazanej wartości logicznej.
renderIf(predicate)(element)
renderif.js
'use strict';
const isFunction = input => typeof input === 'function';
export default predicate => elemOrThunk =>
predicate ? (isFunction(elemOrThunk) ? elemOrThunk() : elemOrThunk) : null;