初期画面は『取得中...』というのが出ないように、ボタンを押せば取得中...がでるようなコードに変更しました。
App.js
import { StatusBar } from "expo-status-bar";
import { StyleSheet, Text, View, Button } from "react-native";
import { useState, useEffect } from "react";
import axios from "axios";
export default function App() {
const [joke, setJoke] = useState({ todos: null });
const [isDone, setIsDone] = useState(false);
const pressHandler = () => {
axios
.then((res) => {
setJoke({ ...joke, todos: res.data });
})
.catch((err) => {
console.log(err);
});
setIsDone(true);
};
if (!joke.todos) {
if (!isDone) {
return (
<View style={styles.containerFirst}>
<Text>下のGETボタンを押してください</Text>
<Button title="GET" onPress={pressHandler} />
</View>
);
} else {
return (
<View style={styles.containerFirst}>
<Text>取得中...</Text>
<Button title="GET" onPress={pressHandler} />
</View>
);
}
} else {
return (
<View style={styles.container}>
<Text style={{ fontSize: 20 }}>setup:</Text>
<Text>{joke.todos.setup}</Text>
<Text style={{ fontSize: 20, marginTop: 50 }}>punchline:</Text>
<Text>{joke.todos.punchline}</Text>
<StatusBar style="auto" />
</View>
);
}
}
const styles = StyleSheet.create({
container: {
backgroundColor: "#fff",
justifyContent: "center",
},
containerFirst: {
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});
API処理は非同期処理になるので、
『コールバック関数』『Promise』『async/await』のいずれかの構文を利用すべきでしょう。
下記記事修正して掲載。