Trong phản ứng hoặc phản ứng tự nhiên, cách ẩn / hiển thị thành phần hoặc thêm / xóa không hoạt động như trong Android hoặc iOS. Hầu hết chúng ta nghĩ rằng sẽ có chiến lược tương tự như
View.hide = true or parentView.addSubView(childView)
Nhưng cách phản ứng công việc bản địa là hoàn toàn khác nhau. Cách duy nhất để đạt được loại chức năng này là đưa thành phần của bạn vào DOM hoặc xóa khỏi DOM.
Ở đây trong ví dụ này tôi sẽ thiết lập khả năng hiển thị của chế độ xem văn bản dựa trên nút bấm.
Ý tưởng đằng sau tác vụ này là tạo một biến trạng thái được gọi là trạng thái có giá trị ban đầu được đặt thành false khi sự kiện nhấn nút xảy ra sau đó giá trị bật. Bây giờ chúng ta sẽ sử dụng biến trạng thái này trong quá trình tạo thành phần.
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>
);
}
}
điều duy nhất cần chú ý trong đoạn mã này là renderIf
đây thực sự là một hàm sẽ trả về thành phần được truyền cho nó dựa trên giá trị boolean được truyền cho nó.
renderIf(predicate)(element)
renderif.js
'use strict';
const isFunction = input => typeof input === 'function';
export default predicate => elemOrThunk =>
predicate ? (isFunction(elemOrThunk) ? elemOrThunk() : elemOrThunk) : null;