You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Stack导航返回时如何重置表单输入值

解决React Native返回Home页面时自动重置表单的问题

核心思路

借助React Navigation的useFocusEffect钩子监听Home页面的聚焦状态,当从Result页面返回、Home页面重新获得焦点时,调用react-hook-form的reset方法清空所有表单值。

具体修改步骤

1. 导入必要钩子

在Home组件中添加useFocusEffect和useCallback的导入:

import { useNavigation, useFocusEffect } from "@react-navigation/native";
import { useCallback } from "react";

2. 获取表单重置方法

从useForm的返回值中解构出reset方法:

const { 
    control,
    handleSubmit,
    formState: { errors },
    reset, // 新增:获取表单重置方法
} = useForm({
    resolver: yupResolver(schema),
});

3. 添加聚焦监听逻辑

在组件中添加useFocusEffect,每次Home页面聚焦时自动重置表单:

// 监听页面聚焦,触发表单重置
useFocusEffect(
    useCallback(() => {
        reset();
    }, [reset])
);

修改后的Home组件核心代码片段

export function Home() {
    const { navigate } = useNavigation();
 
    const { 
        control,
        handleSubmit,
        formState: { errors },
        reset,
    } = useForm({
        resolver: yupResolver(schema),
    });

    useFocusEffect(
        useCallback(() => {
            reset();
        }, [reset])
    );

    const onSubmit = (data: any) => {
        console.log(data)
        navigate('Result')
    };
    
    // 其余原有代码保持不变
}

可选替代方案

如果希望在跳转到Result页面时就重置表单(而非返回时),可修改onSubmit方法:

const onSubmit = (data: any) => {
    console.log(data)
    reset(); // 跳转前清空表单
    navigate('Result')
};

注:此方案仅在提交跳转时生效,若用户从其他路径回到Home页面,表单不会自动重置,因此推荐第一种监听页面聚焦的方案覆盖场景更全面。


内容的提问来源于stack exchange,提问作者Ming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:35:18