javascript - 设置状态不更新状态
问题描述
我正在尝试在我的反应应用程序中使用状态挂钩。
但setTodos
下面似乎没有更新todos
我工作的链接:https :
//kutt.it/oE2jPJ 到 github的链接: https ://github.com/who-know-cg/Todo-react
import React, { useState } from "react";
import Main from "./component/Main";
const Application = () => {
const [todos, setTodos] = useState([]);
// add todo to state(todos)
const addTodos = message => {
const newTodos = todos.concat(message);
setTodos(newTodos);
};
return (
<>
<Main
addTodos={message => addTodos(message)}
/>
</>
);
};
export default Application;
在我的 main.js 中
const Main = props => {
const input = createRef();
return (
<>
<input type="text" ref={input} />
<button
onClick={() => {
props.addTodo(input.current.value);
input.current.value = "";
}}
>
Add message to state
</button>
</>
);
};
我希望每次按下按钮时,setTodos()
都会getTodos()
执行 and 并将消息添加到todos
数组中。
但事实证明状态没有改变。(仍然,保留在默认的空白数组中)
解决方案
您不需要在 Main 中将 message 作为参数传递,只需传递函数的名称即可。
<Main addTodos={addTodos} />
推荐阅读
- javascript - 如何在 Next.js getStaticPaths 中调用无服务器函数
- amazon-web-services - 使用 cli 控制 AWS Canaries
- terraform - 循环遍历对象映射
- linux - 在 shell 脚本中的最后一个大括号后添加逗号
- stackdriver - Cloud Logging API 未显示 JSON 有效负载
- c - 将文件中的句点更改为感叹号,并将全文保存到新文件中
- java - 得到关于不兼容类型问题的 .equals(),我如何制作我的 ArrayList
并点兼容并将答案转换为布尔值 - swift - 核心数据:对多谓词被忽略
- java - 从用户那里获取输入——这段代码中有什么不好的味道?
- assembly - 为什么偏移运算符返回一个巨大的偏移量,而变量位于 .data 段的开头?