기본적으로 반응 또는 반응에서 구성 요소 숨기기 / 표시 또는 추가 / 제거가 Android 또는 iOS 에서처럼 작동하지 않습니다. 우리 대부분은 비슷한 전략이있을 것이라고 생각합니다
View.hide = true or parentView.addSubView(childView)
그러나 기본 작업에 반응하는 방식은 완전히 다릅니다. 이러한 종류의 기능을 달성하는 유일한 방법은 컴포넌트를 DOM에 포함 시키거나 DOM에서 제거하는 것입니다.
이 예제에서는 버튼 클릭을 기준으로 텍스트보기의 가시성을 설정합니다.
이 작업의 기본 개념은 버튼 클릭 이벤트가 발생하면 값이 토글 될 때 초기 값이 false로 설정된 state라는 상태 변수를 작성하는 것입니다. 이제 컴포넌트 생성 중에이 상태 변수를 사용할 것입니다.
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;