javascript - 单击可触摸的不透明度后,我试图隐藏并显示反应本机日期选择器
问题描述
我正在开发一个反应本机应用程序,我试图弄清楚如何在单击可触摸的不透明度组件后隐藏日期选择器。
这是设置 datetimepicker 的逻辑
const [showCompleted, setShowCompleted] = useState(false);
const [isHidden, setHidden] = useState(true);
const onChange = (event, selectedDate) => {
const completedDate = selectedDate || Date;
setShowCompleted(Platform.OS === 'ios');
setCompletedDate(completedDate);
};
const showDatepicker = () => {
if (isHidden === true) {
setHidden({ isHidden: false });
setShowCompleted(true);
} else {
setHidden({ isHidden: true });
}
};
这是 UI 的逻辑
<TouchableOpacity
style={{
height: 50,
margin: 15,
backgroundColor: 'white',
borderRadius: 5
}}
onPress={showDatepicker}
>
<View flexDirection='row'>
<Text style={{ color: 'red', fontSize: 15, margin: 15 }}>
Completed Date
</Text>
<Text style={{ marginTop: 15, fontSize: 14, marginLeft: 140 }}>
Mar 17, 2020
</Text>
</View>
</TouchableOpacity>
{isHidden ? (
<View>
{showCompleted && (
<DateTimePicker
testID='dateTimePicker'
placeholder='Completed Date'
value={completedDate}
mode='date'
display='default'
onChange={onChange}
/>
)}
</View>
) : null}
欢迎任何想法。我正在尝试实现与在 iphone 上安排新活动相同的效果。在你触摸日期的地方,日期选择器下降,你再次触摸它,它就会上升。目前,它下降了,但我不知道如何让它回去。我想我忽略了一些非常简单的事情。
解决方案
您的问题似乎是您以错误的方式更新状态,您正在保存包含数据的对象,而不是这样做,而是尝试只放置Boolean
值,因此像这样简化您的开启函数
const showDatepicker = () => {
setShowCompleted(!showCompleted);
};
所以每次你的函数被执行setShowCompleted
时,布尔值都会取反showCompleted
,所以如果你第一次false
点击按钮false
时得到true
,下一次true
变成false
,依此类推。
所以你可以删除isHidden
状态,只使用showCompleted
value
推荐阅读
- typescript - 如何解决 Visual Studio 2019 中“只能使用 'esModuleInterop' 标志默认导入”?
- python - 有没有办法创建一个气泡弹出窗口,可用于将文本输入到不同的文本输入中?
- javascript - 使用 AJAX 调用的结果初始化 Vue 数据
- flutter - 在“extensionRPCs”中找不到“ext.flutter.driver” - 会是什么问题?
- ruby-on-rails - 为什么我需要在 Ruby on rails 应用程序中包装线程?
- javascript - html中的列表转到下一行留下空白
- firebase - Firebase 托管缓存 Google Cloud Run 请求
- pdf - Android相机,拍照并保存为多页PDF,然后通过以下方式上传到服务器
- ruby-on-rails - Postgresql 10 逻辑复制 - 同步副本数据库表的最佳方法是什么
- excel - How to keep the last row of a matching string in excel