【问题标题】:How to use useFocusEffect hook to fetch data?如何使用 useFocusEffect 挂钩来获取数据?
【发布时间】:2020-04-11 05:54:15
【问题描述】:

我是 React Native 的新手,刚刚升级到 react-navigation-5

我正在努力用新的钩子 useFocusEffect 替换旧的 listener 函数

这是旧函数:

const loadTrips = useCallback(async() => {
        setError(null);
        setIsRefreshing(true);
        try {
            dispatch(tripActions.fetchTrip());
        } catch (error) {
            console.log(error);
            setError(error.message);
        }
        setIsRefreshing(false);
    },[dispatch, setIsRefreshing, setError]);
*********************************************************
// This is the old function
    useEffect(() => {
        const willFocus = props.navigation.addListener(
            'willFocus',
            loadTrips
        );
        return () => {willFocus.remove();}
    },[loadTrips]);
*********************************************************

    useEffect(() => {
        setIsLoading(true);
        loadTrips().then(
            setIsLoading(false),
        );
    }, [dispatch, loadTrips])

编辑 1

我试图将loadtrips 函数传递给useFocusEffect,但它显示错误

useFocusEffect(loadTrips) 

请帮忙

【问题讨论】:

    标签: javascript reactjs react-native react-hooks


    【解决方案1】:

    您可以简单地将loadTrips 函数传递给useFocusEffect

    const loadTrips = useCallback(async() => {
            setError(null);
            setIsRefreshing(true);
            try {
                dispatch(tripActions.fetchTrip());
            } catch (error) {
                console.log(error);
                setError(error.message);
            }
            setIsRefreshing(false);
        },[dispatch, setIsRefreshing, setError]);
    useFocusEffect(useCallback(() => loadTrips(), [dispatch, setIsRefreshing, setError]));
    

    【讨论】:

    • 嘿舒巴姆,感谢您的帮助。但是当我尝试你的方式时它会显示错误
    • 感谢您的更新。但是,当我尝试像这样将myFunc 添加到loadTrips 中时,loadTrips 将不再是Promise。而且由于我在useEffect 调用中将其用作Promise(问题中显示了我的代码底部),因此它将显示错误:未定义为对象(评估loadTrips().then())。当我尝试时它确实显示错误
    • 好的,那么还有另一种方法。更新我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2017-10-21
    • 2021-03-13
    • 1970-01-01
    • 2020-06-20
    • 2022-01-16
    • 2021-02-06
    相关资源
    最近更新 更多