反応またはネイティブで反応するコンポーネントの非表示/表示または追加/削除の方法は、AndroidまたはiOSのように機能しません。私たちのほとんどは、次のような同様の戦略があると思います
View.hide = true or parentView.addSubView(childView)
しかし、ネイティブの作業に反応する方法は完全に異なります。この種の機能を実現する唯一の方法は、コンポーネントをDOMに含めるか、DOMから削除することです。
この例では、ボタンのクリックに基づいてテキストビューの可視性を設定します。
このタスクの背後にある考え方は、ボタンクリックイベントが発生したときに値が切り替わるときに初期値が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;