Якщо реагувати або реагувати нативним, так, як компонент приховати / показати або додати / видалити не працює, як в android або iOS. Більшість з нас думає, що була б подібна стратегія, як
View.hide = true or parentView.addSubView(childView)
Але спосіб реагування на рідну роботу зовсім інший. Єдиний спосіб домогтися такого функціоналу - це включити свій компонент у свій DOM або видалити його з DOM.
Ось у цьому прикладі я збираюся встановити видимість перегляду тексту на основі натискання кнопки.
Ідея цього завдання полягає у створенні змінної стану під назвою state, початкове значення якої встановлено на false, коли відбувається подія натискання кнопки, а потім значення перемикається. Тепер ми будемо використовувати цю змінну стану під час створення компонента.
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>
);
}
}
єдине, що слід помітити в цьому фрагменті, це те, renderIf
що насправді є функцією, яка повертає переданий йому компонент на основі переданого йому булевого значення.
renderIf(predicate)(element)
renderif.js
'use strict';
const isFunction = input => typeof input === 'function';
export default predicate => elemOrThunk =>
predicate ? (isFunction(elemOrThunk) ? elemOrThunk() : elemOrThunk) : null;