Javascript 反应本地选择器,其中第二选择器';s项取决于第一个选择器的selectedValue
我有2个选择器1个主选择器,第2个选择器中的项目将取决于它的选定值。每个子过滤器的列表都加载到ComponentDidMount上 选择器1)过滤器按:全部、类别、状态 Picker2)子筛选器:全部,如果Picker1==类别显示{item1,item2,item3…},如果Picker1==状态显示{Open,Cancelled,Rejected,Done} 场景:Javascript 反应本地选择器,其中第二选择器';s项取决于第一个选择器的selectedValue,javascript,reactjs,react-native,react-native-android,picker,Javascript,Reactjs,React Native,React Native Android,Picker,我有2个选择器1个主选择器,第2个选择器中的项目将取决于它的选定值。每个子过滤器的列表都加载到ComponentDidMount上 选择器1)过滤器按:全部、类别、状态 Picker2)子筛选器:全部,如果Picker1==类别显示{item1,item2,item3…},如果Picker1==状态显示{Open,Cancelled,Rejected,Done} 场景: 选择FilterBy上的“类别”:将触发FilterBy的设置状态setFilterBy 将呈现类别的子筛选器列表项 选择子过
<Grid style={styles.alignCenter}>
<Col>
<Text>Filter by:</Text>
</Col>
<Col size={3}>
<Form>
<Picker
id="Filter"
mode="dropdown"
iosIcon={<Icon name="arrow-down" />}
style={{ width: '100%', flex: 1 }}
selectedValue={filterBy}
onValueChange={itemValue => {
setSelectedCategory(0);
setSelectedStatus(0);
setCurrentPage(1);
setFilterBy(itemValue);
}}
>
<Picker.Item key="0" label="Select Filter" value="key0" />
<Picker.Item label="Category" value="key1" />
<Picker.Item label="Status" value="key2" />
</Picker>
</Form>
</Col>
</Grid>
<Grid style={styles.alignCenter}>
<Col style={styles.marginTop10}>
<Text>SubFilter</Text>
</Col>
<Col size={3} style={styles.marginTop10}>
<Form>
{filterBy === 'key1' ? (
<Picker
mode="dropdown"
iosIcon={<Icon name="arrow-down" />}
style={{ width: '100%', flex: 1 }}
selectedValue={selectedCategory}
onValueChange={itemValue => {
setCurrentPage(1);
setSelectedStatus(0);
setSelectedCategory(0);
refetch();
}}
>
<Picker.Item key="0" label="All" value="0" />
{categoryList &&
categoryList.getTaskCategoryList.list.map(item => (
<Picker.Item
label={item.category_name}
value={item.id}
key={item.id}
/>
))}
</Picker>
) : filterBy === 'key2' ? (
<Picker
mode="dropdown"
iosIcon={<Icon name="arrow-down" />}
style={{ width: '100%', flex: 1 }}
selectedValue={selectedStatus}
onValueChange={itemValue => {
setCurrentPage(1);
setSelectedCategory(0);
setSelectedStatus(0);
refetch();
}}
>
<Picker.Item key="0" label="All" value="0" />
{Object.values(TaskStatus)
.slice(1)
.map((item, idx) => (
<Picker.Item
label={item}
value={idx}
key={item}
/>
))}
</Picker>
) : null}
</Form>
</Col>
</Grid>
筛选依据:
{
设置所选类别(0);
设置选定状态(0);
设置当前页面(1);
setFilterBy(itemValue);
}}
>
副过滤器
{filterBy==='key1'(
{
设置当前页面(1);
设置选定状态(0);
设置所选类别(0);
重新蚀刻();
}}
>
{类别列表&&
categoryList.getTaskCategoryList.list.map(项=>(
))}
):filterBy==='key2'?(
{
设置当前页面(1);
设置所选类别(0);
设置选定状态(0);
重新蚀刻();
}}
>
{Object.values(TaskStatus)
.切片(1)
.map((项目,idx)=>(
))}
):null}
如果我对更改第一个筛选器(选取器)的理解正确,它应该在第二个筛选器(选取器)中设置一些数据。是否设置?是的,它将是为第二个选取器呈现列表的决定因素。从更改第一个筛选器的代码来看,您正在呈现第二个筛选器。因为您是有条件地呈现第二个列表,每次第一个列表更改时,它都会初始化第二个列表,初始值如您所述的0th。您可以做的是为每个可能的第二个选择器维护单独的状态变量。这样它就不会被重置。@ThakurKarthik您是说我应该为类别和状态设置单独的变量吗?不,这会像firstFilter:[all | category | status],子过滤器1:[ActiveItemOfAstList | first-ItemOfAstList],子过滤器2:[ActiveItemOfAndList | first-ItemOfAndList],。。。。