当前位置: 首页 > 知识库问答 >
问题:

为什么第一次调用函数时React返回空?[副本]

松嘉颖
2023-03-14

当我在输入元素中输入第一个字符时,我得到“空字符串”。

function form(props) {
    // function getData(e){
    //     e.preventDefault()
    //     console.log(e.target[1].value)
    const [title, setTitle] = useState("")

    function getTitle(e){
        setTitle(e.target.value)
        console.log(title) //First time shows "empty string"
    }

    
    return (
        <form >
            <div>
                <label >Title</label>
                <input type="text"  name="title" onChange={getTitle} />
            </div>
    </form>)

在我看来,我在输入元素中输入一个字符,触发“onChange”事件,运行函数getTitle,设置“title”变量,该变量连接到useState钩子,然后控制结果。按照这个推理,我希望输入第一个字符。相反,我得到的是“空字符串”。从第二个字符开始,控制台打印字符。

对于“onInput”,函数也会发生同样的情况。

如何解决这个问题,为什么会发生?

共有2个答案

施鸿
2023-03-14

setTitleasyncronous,必须检查useffect

useEffect(() => {
   console.log(title);
}, [title])
商夜洛
2023-03-14

设置状态是异步的,因此您的console.log在设置状态之前运行。如果您使用use效应钩子来查看状态,您应该会看到值。挂接运行后渲染,因此您将看到当时更新的状态信息。

useEffect(() => {
   console.log(title);
}, [title]);
 类似资料:
  • 在上面的代码中,执行以下语句时不调用复制构造函数: 既然返回是按值的,为什么不调用复制构造函数? 谢啦

  • (免责声明:人们通过facebook、firebase等请求询问使用异步操作时数据为空/不正确时,会产生很多问题。我提出这个问题的目的是为每个从android异步操作开始的人提供一个简单的答案。) 我试图从我的一个操作中获取数据,当我使用断点或日志调试它时,值就在那里,但当我运行它时,它们总是空的,我该如何解决这个问题呢? 火力基地 脸书 等。

  • 我正在使用react钩子和contextAPI开发一个简单的MERN stack todo应用程序,我使用axios从mongodb数据库获取数据,并使用useEffect设置initialState数组变量来模拟componentDidMount,然后initialState用作useReducer的参数。我的问题是子组件没有收到initialState,而是收到一个空数组,但是所有其他的道具,

  • 很抱歉问了一个关于已经讨论过很多次的论点的非常基本的问题,我就是想不出答案。我试着在论坛上搜索已经在主题上提出的问题,但没有找到确切的答案(或者不理解)。 当以不同顺序调用时,为什么此函数会打印两次从i到10的数字?它不应该按同样的顺序打印出来吗?我一直听说递归就是这样工作的:每个函数在其代码中调用另一个相同的函数,只应用于较小的域,直到满足结束条件为止。此时,它应该返回(回溯)到原始函数;这就是

  • 问题内容: 在以下示例中,当单击时,将显示而不是。为什么?您将如何解决? 问题答案: React的对帐算法假定没有相反的信息,如果自定义组件出现在后续渲染的同一位置,则它与以前的组件相同,因此将重用前一个实例,而不是创建一个新实例。 如果要实现,则会看到被调用。 不同的节点类型 元素不太可能生成看起来像a 会生成的DOM 。无需花费时间尝试匹配这两种结构,React只是从头开始重建树。 作为推论,

  • 这里,当我返回一个箭头函数insted时,它不起作用: 我知道箭头函数是松散的,这就是为什么我在这里尝试在括号中返回它。没有他们也不行。