Вы не можете использовать ловушки внутри компонента класса. Хуки введены React для использования в функциональных компонентах. Таким образом, у вас есть два варианта:
- использовать setState в вашем текущем компоненте класса ИЛИ
- преобразовать ваш компонент класса в функциональный компонент.
Я предлагаю вам go с функциональным компонентом, поскольку вы не используете какие-либо жизненные циклы компонента класса.
Если вы go с первым подходом, вы можете изменить свой код, как показано ниже: -
export default class App extends Component {
state = {
fontsLoaded: false,
};
updateFontsLoadedState = () => {
this.setState({ fontsLoaded: true });
}
render() {
const { fontsLoaded } = this.state;
const gradientHeight=500;
const gradientBackground = '#12C1E5';
const data = Array.from({ length: gradientHeight });
if(fontsLoaded){
return (
<View style={styles.container}>
<View style={styles.centering}>
<Text style={styles.titleText}>Test Title</Text>
</View>
<View style={{flex:1}}>
{data.map((_, i) => (
<View
key={i}
style={{
position: 'absolute',
backgroundColor: gradientBackground,
height: 1,
bottom: (gradientHeight - i),
right: 0,
left: 0,
zIndex: 2,
opacity: (1 / gradientHeight) * (i + 2)
}}
>
</View>
))}
</View>
</View>
);
} else {
return (
<AppLoading
startAsync={getFonts}
onFinish={this.updateFontsLoadedState}
/>
);
}
}
}
Если вы хотите использовать лучший подход, используйте хуки и преобразовать это в функциональный компонент, тогда вы можете сделать это, как показано ниже: -
export default function App(props) {
const [fontsLoaded ,setFontsLoaded] = useState(false);
const gradientHeight=500;
const gradientBackground = '#12C1E5';
const data = Array.from({ length: gradientHeight });
if(fontsLoaded){
return (
<View style={styles.container}>
<View style={styles.centering}>
<Text style={styles.titleText}>Test Title</Text>
</View>
<View style={{flex:1}}>
{data.map((_, i) => (
<View
key={i}
style={{
position: 'absolute',
backgroundColor: gradientBackground,
height: 1,
bottom: (gradientHeight - i),
right: 0,
left: 0,
zIndex: 2,
opacity: (1 / gradientHeight) * (i + 2)
}}
>
</View>
))}
</View>
</View>
);
} else {
return (
<AppLoading
startAsync={getFonts}
onFinish={() => setFontsLoaded(true)}
/>
);
}
}