Cześć,
używam FlatList w react native i potrzebuje określić przy renderowaniu widoku który element ma się pokazywać jako pierwszy.
Korzystam z wariantu horyzontalnego gdzie jeden element zajmuje całą szerokość ekranu.
Dowiedziałem się, że żeby to zrobić potrzebuje ustawić getItemLayout
oraz initialScrollIndex
.
Wszystko mi działa jeżeli robię to na liście która domyślnie ma już w sobie elementy (czyli bez żadnego API).
Problem pojawia się jak te elementy wyciągam z API i dopiero trafiają do tej listy po jakimś czasie.
Próbowałem np. robić ifa, że jak są pobrane elementy z API, to dopiero wtedy renderuj listę, ale nie działa.
Generalnie brak mi już pomysłów. Może ktoś robił coś podobnego albo widzi gdzie robie błąd ?
const items: MyItem[] = [];
export const MyScreen = () => {
useFocusEffect(
React.useCallback(() => {
getData();
}
);
const getData = () => {
axios.get('/getMyItems').then(response => {
response.data.items.map(x => {
items.push({ name: x.name})
}
}
}
const getItemLayout = (_, index) => {
return {
length: windowWidth - 20 + ITEM_MARGIN_RIGHT,
offset: (windowWidth - 20 + ITEM_MARGIN_RIGHT) * (index - 1),
index,
};
}
const renderItem = ({item}: any) => {
<View>
<Text>{item.name}</Text>
</View>
}
return (
<FlatList
data={items}
horizontal={true}
initialScrollIndex={1}
renderItem={renderItem}
getItemLayout={getItemLayout}
/>
)
}