[英]"arrow function expected no return value" with clean-up function in useEffect
[英]React Native useEffect - Warning: An effect function must not return anything besides a function, which is used for clean-up
我想實現一個功能來檢查是否預訂了 20 個可用座位之外的特定座位。 如果是,則返回紅色,如果不是,則返回綠色。
我將獲取功能實現為
const getSeatColor = (seat, vid) => {
const [color, setColor] = useState(0);
useEffect(async () => {
const response = await fetch(
`http://192.168.8.100/dbops/actions/seat_status.php?seat=${seat}&vid=${vid}`
);
const result = await response.json();
setColor(result.message);
}, []);
return color;
};
const vid = 4;
const seat1Color = getSeatColor(1, vid);
const seat2Color = getSeatColor(2, vid);
const seat3Color = getSeatColor(3, vid);
const seat4Color = getSeatColor(4, vid);
return (
<Screen style={{ paddingBottom: 5 }}>
{/* Seat 1 starts */}
<TouchableOpacity style={styles.seat} >
<MaterialCommunityIcons name="seat" size={40} color={seat1Color} />
<Button title="1" style={{ width: 20 }} color={seat1Color} />
</TouchableOpacity>
{/* Seat 1 ends */}
{/* Seat 2 starts */}
<TouchableOpacity style={styles.seat} >
<MaterialCommunityIcons name="seat" size={40} color={seat2Color} />
<Button title="2" style={{ width: 20 }} color={seat2Color} />
</TouchableOpacity>
{/* Seat 2 ends */}
<View style={styles.seat}></View>
<View style={styles.seat}></View>
{/* Seat 3 starts */}
<TouchableOpacity style={styles.seat} >
<MaterialCommunityIcons name="seat" size={40} color={seat3Color} />
<Button title="3" style={{ width: 20 }} color={seat3Color} />
</TouchableOpacity>
</Screen>
)
綠色或紅色顯示正常,但我收到此警告:效果函數不得返回除用於清理的函數之外的任何內容。
我試過這個How to call an async function inside a UseEffect() in React? 但同樣的警告彈出。 請幫忙或者有其他方法可以實現這一目標嗎?
您將直接使用 async 關鍵字作為回調參數返回一個承諾。 嘗試像這樣重寫你的 useEffect:
useEffect(() => { (async() => { const response = await fetch( `http://192.168.8.100/dbops/actions/seat_status.php?seat=${seat}&vid=${vid}` ); const result = await response.json(); setColor(result.message); })() }, []);
或者將該代碼包裝在另一個函數中並在 useEffect 中調用它
const fetchData = async () => { const response = await fetch( `http://192.168.8.100/dbops/actions/seat_status.php?seat=${seat}&vid=${vid}` ); const result = await response.json(); setColor(result.message); } useEffect(() => { fetchData(); }, []);
useEffect 不接受異步函數。
你可以嘗試做這個:
const getSeatColor = (seat, vid) => {
const [color, setColor] = useState(0);
useEffect(() => {
(async => {
const response = await fetch(`http://192.168.8.100/dbops/actions/seat_status.php?seat=${seat}&vid=${vid}`);
const result = await response.json();
setColor(result.message);
})();
}, []);
return color;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.