在数组中筛选超过500个项目时,React原生应用程序中断

htzpubme  于 2023-01-14  发布在  React
关注(0)|答案(1)|浏览(131)

我得到了一个包含大约1500个对象的更大数组,我必须根据搜索输入过滤这些对象,但只要数组中的项目超过500个左右,应用程序就会中断

const filteredOptions = options.filter((option) => {
    return option.name.toLowerCase().includes(searchValue.toLowerCase());
  });

我得到的错误是option.name.toLowerCase()不是函数,但是如果我将数组切片为大约400个项目,它就可以正常工作
这是我使用过滤选项的方式

<ScrollView>
          {filteredOptions.map((option, index) => {
            return (
              <View
                key={index}
                style={{
                  backgroundColor: "#ddd",
                  paddingVertical: 15,
                  marginTop: 10,
                  paddingHorizontal: 10,
                  borderRadius: 8,
                }}
              >
                <TouchableOpacity onPress={() => handleSelection(option)}>
                  <Text>{option.name}</Text>
                </TouchableOpacity>
              </View>
            );
          })}
        </ScrollView>

这就是我处理搜索输入的方式

<TextInput
          style={{
            borderWidth: 1,
            fontSize: 20,
            paddingVertical: 7,
            paddingHorizontal: 4,
            borderRadius: 12,
            marginBottom: 30,
          }}
          value={searchValue}
          onChangeText={(text) => setSearchValue(text)}
          placeholder={"Trazi"}
          placeholderTextColor={"#000"}
     />

如果我试图只Map选项而不对它们进行切片和过滤,我会得到错误maximum call stack size exceeded dep

wljmcqd8

wljmcqd81#

首先,您需要添加一个空检查:

const filteredOptions = options.filter((option) => {
    if (option && option.name && searchValue) {
      return option.name.toLowerCase().includes(searchValue.toLowerCase());
    }
});

第二,由于性能问题,对于这个大的项目列表,最好使用FlatList

相关问题