Zasadniczo, jeśli chcesz ustawić rozmiar i zmienić go, ustaw go na stan w układzie w następujący sposób:
import React, { Component } from 'react';
import { AppRegistry, StyleSheet, View } from 'react-native';
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'yellow',
},
View1: {
flex: 2,
margin: 10,
backgroundColor: 'red',
elevation: 1,
},
View2: {
position: 'absolute',
backgroundColor: 'orange',
zIndex: 3,
elevation: 3,
},
View3: {
flex: 3,
backgroundColor: 'green',
elevation: 2,
},
Text: {
fontSize: 25,
margin: 20,
color: 'white',
},
});
class Example extends Component {
constructor(props) {
super(props);
this.state = {
view2LayoutProps: {
left: 0,
top: 0,
width: 50,
height: 50,
}
};
}
onLayout(event) {
const {x, y, height, width} = event.nativeEvent.layout;
const newHeight = this.state.view2LayoutProps.height + 1;
const newLayout = {
height: newHeight ,
width: width,
left: x,
top: y,
};
this.setState({ view2LayoutProps: newLayout });
}
render() {
return (
<View style={styles.container}>
<View style={styles.View1}>
<Text>{this.state.view2LayoutProps.height}</Text>
</View>
<View onLayout={(event) => this.onLayout(event)}
style={[styles.View2, this.state.view2LayoutProps]} />
<View style={styles.View3} />
</View>
);
}
}
AppRegistry.registerComponent(Example);
Możesz stworzyć o wiele więcej wariantów tego, jak powinno być zmodyfikowane, używając tego w innym komponencie, który ma inny widok jako opakowanie i utworzyć wywołanie zwrotne onResponderRelease, które może przekazać lokalizację zdarzenia dotyku do stanu, który może być następnie przekazany do komponentu podrzędnego jako właściwość, która może przesłonić zaktualizowany stan onLayout przez umieszczenie {[styles.View2, this.state.view2LayoutProps, this.props.touchEventTopLeft]}
i tak dalej.