reactjs - 单击一个子组件隐藏所有其他相同的子组件
问题描述
Touchable Opacity
我使用and创建了一个自定义 Picker 组件Picker
。单击可触摸的不透明度组件时,相关的 Picker 会切换。我在一个具有不同数据的父级中多次使用此组件。
Picker 的切换状态isPickerOpen
在子组件中定义和使用,以降低父组件中状态管理的复杂性。我需要单击每个可触摸的不透明度来显示和隐藏其相关的选取器。
下面是子组件的代码:
function CustomPicker(props) {
const {listItem, callbackParent} = props;
const [isPickerOpen, setPickerOpen] = useState(false);
const pickerListItem = listItems.map((item, i) => {
return <Picker.Item key={i} label={item.text} value={item.value} />
});
return (
<View>
<TouchableOpacity style={styles.pickerButton}
onPress={() => setPickerOpen(!isPickerOpen)}>
<Text>Title</Text>
</TouchableOpacity>
{isPickerOpen && <Picker onValueChange={(value) =>
callbackParent(value)}>
{pickerListItem}
</Picker>
}
</View>
);
}
和父组件分数:
<SelectionPicker listItems={list1} onPickerSelection={handleChange} />
<SelectionPicker listItems={list2} onPickerSelection={handleChange} />
<SelectionPicker listItems={list3} onPickerSelection={handleChange} />
如何在点击可触摸不透明度时管理子组件的状态,隐藏所有其他打开的选择器,并只显示一个相关的选择器?
解决方案
您需要添加一个外部变量以对 Picker 组件进行另一种形式的验证,如下所示:
function CustomPicker(props) {
const {
listItems,
onPickerClick,
onPickerSelection,
selectable = true,
name,
} = props;
//
const [isPickerOpen, setPickerOpen] = useState(false);
const pickerListItem = listItems.map((item, i) => {
return <Picker.Item key={i} label={item.text} value={item.value} />
});
return (
<View>
<TouchableOpacity
style={styles.pickerButton}
onPress={() => {
// calling our picker selection function
onPickerClick(name)
setPickerOpen(!isPickerOpen)
}}
>
<Text>Title</Text>
</TouchableOpacity>
{(isPickerOpen && selectable) && <Picker onValueChange={(value) =>
onPickerSelection(value, name)}>
{pickerListItem}
</Picker>
}
</View>
);
}
// Our selection handling function
handleSelection(name) {
this.setState({
currentPicker: name,
})
}
// Adding unique names, a validation prop, and a selection method
<SelectionPicker
name="someNameA"
selectable={'someNameA' === currentPicker}
onPickerClick={handleSelection}
onPickerSelection={handleChange}
listItems={list1}
/>
<SelectionPicker
name="someNameB"
selectable={'someNameB' === currentPicker}
onPickerClick={handleSelection}
onPickerSelection={handleChange}
listItems={list2}
/>
<SelectionPicker
name="someNameC"
selectable={'someNameC' === currentPicker}
onPickerClick={handleSelection}
onPickerSelection={handleChange}
listItems={list3}
/>
推荐阅读
- python - 首先根据年份降序和月份升序对 pandas DataFrame 列进行排序
- arrays - 如何在快速附加数组后使表格视图从 Firebase Firestore 加载数据
- javascript - 这里映射 api:行为在 Microsoft Web 浏览器 ActiveX 中没有反应
- google-optimize - Google Optimize 重定向测试重新加载页面
- node.js - Mongoose nodejs:find() 和 populate() 调用
- docker - 如何检查停止的 docker 容器文件
- jvm - 什么是字节码转换?
- java - Flutter 如何为 Sensor 调用 PUT GET API
- java - 部署在 PCF 上的 springboot 应用程序如何从 Websphere MQ 读取消息
- reactjs - 得到“无法读取未定义的属性”地图