В моем проекте React Native я хочу создать список с возможностью поиска, как показано в этой статье.
Теперь, когда я копирую и вставляю код из здесь все работает нормально.
Но я должен внести некоторые изменения, чтобы использовать его в своем проекте. Например, мне не нужно извлекать случайные фиктивные данные, чтобы заполнить список, но у меня уже есть такие, которые намного проще структурированы. Кроме того, я хочу использовать функциональный компонент с хуками вместо классового компонента. (И я использую Native Base вместо Native-Elements для SearchBar, но это, похоже, не представляет никакой проблемы.)
Поэтому я преобразовал пример статьи, как указано выше, в Компонент Function, но теперь SearchBar- Печатание прервано.
Панель поиска теперь позволяет вводить только одну букву, затем клавиатура исчезает, и вам нужно снова щелкнуть поле ввода, чтобы продолжить ввод. Я абсолютно не знаю, что я делаю здесь не так. Я уже пытался работать с useEffect()
Hook, но безуспешно. Вы можете мне помочь?
Вот анимированная задача:
А вот код:
import React, {useEffect, useState} from 'react';
import {View, FlatList, ActivityIndicator, StyleSheet} from 'react-native';
import {Button, Header, Icon, Item, Input, Text} from 'native-base';
type Props = {};
const FlatListDemo: React.FC<Props> = ({}) => {
const arrayholder = [
{
id: '1',
name: 'Hopper',
selected: false,
},
{
id: '2',
name: 'Dustin',
selected: false,
},
{
id: '3',
name: 'Mike',
selected: false,
},
];
const [data, setData] = useState(arrayholder);
const [value, setValue] = useState('');
renderSeparator = () => {
return (
<View
style={{
height: 1,
width: '86%',
backgroundColor: '#CED0CE',
marginLeft: '14%',
}}
/>
);
};
const textChangedFunction = text => {
setValue(text);
};
useEffect(() => {
searchFilterFunction(value);
}, [value]);
const searchFilterFunction = text => {
setValue(text);
const newData = arrayholder.filter(item => {
const itemData = `${item.name.toUpperCase()}`;
const textData = text.toUpperCase();
return itemData.indexOf(textData) > -1;
});
setData(newData);
};
renderHeader = () => {
return (
<Header searchBar rounded>
<Item>
<Icon name="ios-search" />
<Input
placeholder="Type Here..."
onChangeText={text => textChangedFunction(text)}
value={value}
/>
</Item>
</Header>
);
};
return (
<View style={{flex: 1}}>
<FlatList
data={data}
renderItem={({item}) => (
<ListItem title={`${item.name}`} subtitle={item.id} />
)}
ItemSeparatorComponent={renderSeparator}
ListHeaderComponent={renderHeader}
/>
</View>
);
};
export default FlatListDemo;
Помощь будет высоко ценится!