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

页面返回时TextInput新值未生效?硬件返回键触发Redux存值异常

问题原因

你碰到了闭包陷阱:useEffect的依赖数组是空的,组件挂载时只会生成一次清理函数(也就是return的那个函数),这个函数里捕获的text是初始状态的"initial"。哪怕后续输入框修改了text的值,已经生成的清理函数里的text不会同步更新,所以返回页面时打印/发送的始终是初始值。

解决方法

两种常用修复方式,选其一即可:

方法一:给useEffect添加正确依赖

把text加入useEffect的依赖数组,每次text更新时,useEffect会重新生成清理函数,确保捕获最新的text值:

import { TextInput } from 'react-native'
import React, { useEffect, useState } from 'react'

export default function ChangeModel({ navigation }) {
    const [text, setText] = useState("initial")
  
    const onPressSave = () => {
        console.log(text)
        // 替换成Redux发送逻辑,比如:
        // dispatch(updateInputTextAction(text))
    }

    useEffect(() => {
        return () => onPressSave()
    }, [text]) // 添加text作为依赖


    return (
        <TextInput
            value={text}
            onChangeText={setText}
            style={{ backgroundColor: "grey" }}
        />
    )
}

方法二:用useCallback包裹保存函数

如果onPressSave需要复用或逻辑复杂,用useCallback包裹它,确保函数能捕获最新的text,再把函数加入useEffect依赖:

import { TextInput } from 'react-native'
import React, { useEffect, useState, useCallback } from 'react'

export default function ChangeModel({ navigation }) {
    const [text, setText] = useState("initial")
  
    const onPressSave = useCallback(() => {
        console.log(text)
        // Redux发送逻辑:
        // dispatch(updateInputTextAction(text))
    }, [text]) // 依赖text,text更新时函数重新生成

    useEffect(() => {
        return () => onPressSave()
    }, [onPressSave]) // 依赖包裹后的函数


    return (
        <TextInput
            value={text}
            onChangeText={setText}
            style={{ backgroundColor: "grey" }}
        />
    )
}
补充说明

后续把console.log(text)替换成Redux的dispatch逻辑即可,只要确保text是最新值,就能正确发送最后输入的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:45:21