react native hooks 如何避免重复请求
在React Native中使用hooks时,避免重复请求可以使用useRef
来存储请求状态,或者使用自定义的useMount
或useComponentDidMount
(模拟类组件中的componentDidMount
)钩子,并结合条件渲染。
以下是一个使用自定义useComponentDidMount
钩子避免重复请求的例子:
import React, { useState, useRef, useEffect } from 'react';
import { View, Text, Button } from 'react-native';
function useComponentDidMount(callback) {
const isMounted = useRef(false);
useEffect(() => {
isMounted.current = true;
return () => {
isMounted.current = false;
};
}, []);
useEffect(() => {
if (isMounted.current) {
callback();
}
}, [callback]);
}
export default function MyComponent() {
const [data, setData] = useState(null);
const [isLoading, setIsLoading] = useState(false);
const fetchData = async () => {
setIsLoading(true);
const response = await fetch('https://api.example.com/data');
const newData = await response.json();
setData(newData);
setIsLoading(false);
};
useComponentDidMount(fetchData);
if (isLoading) {
return <Text>Loading...</Text>;
}
if (!data) {
return null; // 或者其他内容
}
return (
<View>
<Text>{data.someProperty}</Text>
<Button onPress={fetchData} title="Refresh" />
</View>
);
}
在这个例子中,useComponentDidMount
钩子确保了传入的回调函数只会在组件挂载后执行一次。这样,当用户刷新数据时,即使用户快速点击多次按钮,也不会发起多个请求,因为请求只会在组件挂载后执行一次。
评论已关闭