在react或react native中,组件隐藏/显示或添加/删除的方式无法像在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;