ในการตอบสนองหรือโต้ตอบพื้นเมืองวิธีซ่อน / แสดงหรือเพิ่ม / ลบส่วนประกอบไม่ทำงานเหมือนใน Android หรือ iOS พวกเราส่วนใหญ่คิดว่าจะมีกลยุทธ์คล้ายกัน
View.hide = true or parentView.addSubView(childView)
แต่วิธีการตอบสนองต่องานพื้นเมืองนั้นแตกต่างอย่างสิ้นเชิง วิธีเดียวที่จะใช้ฟังก์ชันนี้ได้คือการรวมส่วนประกอบของคุณใน DOM หรือลบออกจาก DOM
ในตัวอย่างนี้ฉันจะตั้งค่าการแสดงผลของมุมมองข้อความตามการคลิกปุ่ม
แนวคิดเบื้องหลังภารกิจนี้คือการสร้างตัวแปรสถานะที่เรียกว่าสถานะที่มีค่าเริ่มต้นตั้งค่าเป็นเท็จเมื่อเหตุการณ์การคลิกปุ่มเกิดขึ้นจากนั้นค่าจะสลับ ตอนนี้เราจะใช้ตัวแปรสถานะนี้ในระหว่างการสร้างองค์ประกอบ
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;