我正在尝试在react中开发todo应用程序。下面是代码。
当我在文本框中输入todo并单击添加时,todo将给出旧值。
例如,如果我输入“a”,则todo数组将给出[]
,然后当我输入“b”时,todo显示[“a”]
。请帮忙。
import React, { useState, useEffect } from "react";
function Todo() {
const [value, setValue] = useState("");
const [todos, setTodos] = useState([]);
function changeHandler(e) {
// console.log(e.target.value)
setValue(e.target.value);
}
// this doesn't update todos and moreover logs infinitely
// useEffect(() => {
// setTodos([...todos]);
// }, [todos]);
function handleClick() {
setTodos([...todos, value]);
console.log(todos);
setValue("");
}
return (
<div>
<input
type="text"
value={value}
onChange={changeHandler}
placeholder="Add Todo"
/>
<button onClick={handleClick}>Add Todo</button>
</div>
);
}
export default Todo;
编辑:
下面的工作
useEffect(() => {
console.log(todos);
}, [todoList]);
function handleClick() {
setTodos([...todos, value]);
setValue("");
}
// console.log(todos);
return (
...
}
export default Todo;
设置状态是异步的。当使用setTodos或setValue时,它会导致流中的重新渲染。
将控制台移动到Todo作用域函数。这样地:
...
function handleClick() {
setTodos([...todos, value]);
setValue("");
}
console.log(todos);
return (
...
下面的代码会导致一个循环,因为您的useEffect正在侦听todos
中的所有更改,并且您的setTodos
时间更长。
// useEffect(() => {
// setTodos([...todos]);
// }, [todos]);
在React中设置状态是一个异步操作,如果要记录状态的状态,应使用useffect
。
js prettyprint-override">// Don't setTodos in an useEffect for todos since it will result in an infinite loop.
useEffect(() => {
console.log(todos)
}, [todos]);
我有一个简单的组件 问题是我需要添加什么
下面是我的代码的一个片段。调用filteredData()时,状态未更新。在状态更新之前,我必须单击按钮两次。这是一个旧项目,我正在使用钩子更新它。我以前在设置状态后使用了回调函数,但我不能用钩子实现。 }
问题内容: 我正在做一个待办事项应用程序。这是违规代码的非常简化的版本。我有一个复选框: 这是调用复选框的函数: updateItem是映射为分派到redux的函数 我的问题是,当我调用updateItem操作并在console.log状态时,它总是落后1步。如果未选中该复选框且该复选框不为true,则仍将状态为true传递给updateItem函数。我是否需要调用另一个函数来强制状态更新? 问题
我想问一下,为什么在执行事件时,我的状态没有改变。我已经搜索到需要在构造函数中绑定函数,但是状态仍然没有更新。 下面是我的代码:
问题内容: 我想问为什么在执行onclick事件时状态没有变化。我已经搜索了一段时间,我需要在构造函数中绑定onclick函数,但状态仍未更新。这是我的代码: 问题答案: 这个回调真的很混乱。只需使用async await代替:
我正在使用Java FX textarea,并用它来为正在进行的步骤提供信息。 步骤如下。复制文件。删除旧文件。复制新文件。然后将一些属性从旧文件复制到新文件。 当点击一个按钮时,整个步骤开始。 我面临的问题是,当我使用append命令时,文本区域没有被更新。 append 命令添加数据,当函数终止时,我将所有文本放在一起。我希望在调用函数时更新文本区域。 在我的程序中,复制文件操作需要一些时间,