javascript - ReactNative 过滤数据
问题描述
我有 BeautifulPlacesCards 组件,用户可以在其中看到所有地方,我想实现过滤功能:当用户按下复选框“Mountains”时,当用户按下“Mountains”然后按下“Forest”时,他只能看到类型为山的地方他可以看到这两种类型的地方等等。当未按下所有复选框时,将显示所有未过滤的位置。
BeautifulPlacesCards 组件:
这就是我设置从服务器获取的地点的方式:
const [data, setData] = useState([]);
const [filteredData, setFilteredData] = useState(undefined);
在这里,我从服务器获取所有位置并将它们设置为数据:
useEffect(() => {
fetch('https://beautiful-places.ru/api/places')
.then((response) => response.json())
.then((json) => setData(json))
.catch((error) => console.error(error))
}, [])
这是轮播,我检查过滤数据是否未定义的所有地方,而不是从数据中渲染所有地方:
const renderItem = useCallback(({ item, index }: RenderItemProps) => {
return (
<TouchableWithoutFeedback onPress={() => onMarkerPress(item)}>
<View>
<Image {...{uri: item.images[0].image, preview}}
style={{
backgroundColor: "floralwhite",
borderRadius: 5,
height: '80%',
width: width/1.4,
}}
/>
</View>
</TouchableWithoutFeedback>
);
}, []);
return (
<View>
<Header
title="Карточки мест"
left={{ icon: 'menu', onPress: () => navigation.openDrawer() }}
right={{ icon: 'shopping-bag', onPress: () => true }}
/>
<Categories filterDataFromChildren={filterDataFromChildren} />
</View>
<View style={{ marginTop: '10%', height: "80%", justifyContent: "center", alignSelf: "center", alignItems: "center" }}>
{data ? <Carousel
layout={"default"}
style={{ }}
ref={ref}
data={filteredData ? filteredData : data}
sliderWidth={width}
itemWidth={width/1.4}
renderItem={renderItem}
onSnapToItem={(index: number) => setActiveIndex(index)}
/> : <AppLoading /> }
</View>
我使用这个功能:
const filterDataFromChildren = (index) => {
setData(data)
let filtered = data.filter(place => place.type == index[0])
index ? setFilteredData(filtered) : setFilteredData(data)
};
因为我的复选框在子组件中,所以我在按下复选框时使用道具发送此功能我得到了地方的类型。这就像回调。
<Categories filterDataFromChildren={filterDataFromChildren} />
我的问题是,当我按下复选框时,我当前的位置消失了,但实际应该被过滤的位置的 setFilterData 变为空数组,并且在获取后数据中的位置也变为初始状态:空数组。请告诉我在这种情况下,我应该如何以及在哪里保存我的数据,或者你将如何实现这个功能,因为我不知道如何以正确的方式做到这一点。
解决方案
推荐阅读
- c# - C#关于线条图形和屏幕大小的问题
- python - 根据另一列覆盖数据框中的数据
- c - 为什么将编译时静态字符串作为参数传递给字符串格式化函数,而不是将其包含在格式字符串中?
- r - 有没有办法“合并”两列,其中新列的值是具有特定值的原始列的名称,分组明智?
- javascript - 数据表显示条目和搜索功能不起作用
- c# - 具有无法正确关闭 SQL 连接的 ac# 代码(可能)
- css - 当我切换类时,我需要什么代码才能显示正面类?
- r - 使用 mutate 和 case_when 的用户定义函数
- java - 将字符串从活动传递到片段
- arrays - 在 Rust 中,我可以在不硬编码值的情况下实例化我的 const 数组吗?编译时评估?