Я работаю над контактным приложением, поддерживающим реакцию, с функцией поиска в реальном времени. У меня проблема с перерисовкой списка контактов при каждом нажатии клавиши. Есть ли способ оптимизировать функцию поиска, где я могу избежать ненужных повторных отрисовок на Flatlist контактов. Заранее спасибо
вот мой контактный компонент:
const Contacts = () => {
const [contact, setContact] = useState({});
useEffect(() => {...read contacts and then save it to contact and inMemoryContact state});
const renderItem = ({ item }) => <RenderContacts item={item} />;
const renderList = () => {
return (
<FlatList
keyboardShouldPersistTaps="handled"
data={contact}
keyExtractor={(item, index) => index.toString()}
renderItem={renderItem}
/>
);
};
return (
<View>
<Text style={Styles.textStyle}>All Contacts</Text>
{renderList()}
</View>
);
};
вот мой поисковый компонент:
const SearchBar = ({ updateContactState }) => {
const { inMemoryContact } = useSelector(state => state.contactReducer);
const searchContacts = value => {
const filteredContact = inMemoryContact.filter(contactToFilter => {
const contactLowerCase = `${contactToFilter.firstName} ${contactToFilter.lastName}`.toLowerCase();
const searchTerm = value.toLowerCase();
return contactLowerCase.indexOf(searchTerm) > -1;
});
updateContactState(filteredContact);
};
return (
<View style={Styles.SectionStyle}>
<MaterialIcons style={Styles.iconStyle} name="search" size={28} />
<TextInput
placeholder="Search Contact"
autoCapitalize="none"
autoCorrect={false}
onChangeText={content => {
searchContacts(content);
}}
/>
</View>
);
};
вот мой компонент renderContact, который продолжает рендеринг :
const RenderContacts = ({ item }) => {
return item.phoneNumbers.map(element => (
<TouchableOpacity ...>
... list of contacts
</TouchableOpacity>
));
)
}