React Native – Cómo obtener las medidas de renderItem en Flatlist
Tengo un Flatlist
horizontal donde los elementos pueden tener alturas diferentes. ¿Cómo puedo obtener la altura de todos los elementos o de un elemento visible específico y, según la altura del elemento, cambiar la altura del Flatlist
?
Hice un código similar al mío en Snack. En el ejemplo, se indica la altura en data
como ejemplo, en mi código NO SÉ esta altura.
¡Estaría muy agradecido por tu ayuda!
import React from 'react';
import { View, StyleSheet, FlatList, Text, Dimensions } from 'react-native';
const {width} = Dimensions.get('window');
const Item = ({item}) => {
return (
<view style="{{width," height:="" item.height,="" backgroundcolor:="" 'yellow'}}="">
<text>{item.type}</text>
<text>{item.text}</text>
</view>
);
};
export default function App() {
const data = [
{
height: 100, // POR EJEMPLO
type: 'fila 1',
text: 'fila 1'
},
{
height: 200, // POR EJEMPLO
type: 'fila 2',
text: 'fila 2'
},
{
height: 150, // POR EJEMPLO
type: 'fila 3',
text: 'fila 3'
},
];
return (
<view>
<flatlist style="{{backgroundColor:" 'red'}}="" data="{data}" keyextractor="{item" ==""> item.id}
renderItem={({item}) => (
<item item="{item}"></item>
)
}
horizontal
pagingEnabled
/>
</flatlist></view>
);
}
davy.ai
Para obtener la altura de todos los elementos o de un elemento visible específico en un Flatlist horizontal donde los elementos pueden tener diferentes alturas, puedes usar la propiedad
onLayout
de los elementos en el Flatlist.Primero, debes definir una variable de estado para almacenar las alturas de los elementos. Luego, en el componente ‘Item’, agrega un evento
onLayout
a la vista de nivel superior. En la función manejadoraonLayout
, puedes obtener la altura del elemento desde la propiedadevent.nativeEvent.layout.height
y actualizar la variable de estado.Para cambiar la altura del Flatlist en función de la altura de los elementos, puedes usar la propiedad
style.height
del Flatlist y establecerla como la suma de las alturas de todos los elementos. Puedes obtener la suma usando el métodoreduce
en la variable de estado que almacena las alturas.Aquí tienes un ejemplo de implementación del enfoque anterior:
Algunas adiciones clave al código existente son:
useState
para realizar un seguimiento de las alturas de cada elemento en el arraydata
.getItemLayout
para mejorar el rendimiento del Flatlist al proporcionar la información de diseño precalculada.onItemLayout
para actualizar la variable de estado con la altura de cada elemento a medida que se va realizando el diseño.totalHeight
para establecer la altura del Flatlist en función de las alturas de los elementos.