我正在使用useState处理一个待办事项,我试图保存用户输入,然后在他们点击提交后将其推送到listArray,稍后显示它...我认为我在updateArray函数中做错了什么,但我似乎可以理解什么。
import React, { useState } from "react";
function App() {
const listArray = [""];
const [list, updateList] = useState("");
function handleChange(event) {
const { name, value } = event.target;
updateList(value);
//console.log(list);
}
function updateArray() {
console.log(list);
listArray.push(list);
console.log(listArray);
}
return (
<div className="container">
<div className="heading">
<h1>To-Do List</h1>
</div>
<div className="form">
<input name="entry" onChange={handleChange} type="text" />
<button>
<span onSubmit={updateArray}>Add</span>
</button>
</div>
<div>
<ul>
<li>{listArray[0]}</li>
</ul>
</div>
</div>
);
}
export default App;
listary
在每次重新加载时都会被清除。您应该将数据存储在状态中。所以
const[listArray, setListArray]=useState([])
和updateArray
应该如下所示:
function updateArray() {
setListArray([...listArray, list]);
}
我想,在updateArray
函数中应该有一些逻辑来清除列表
将当前值保存到状态中,并将列表保持在状态中,以便在每个渲染周期中不会清除该列表。
import React, { useState } from "react";
function App() {
const [list, updateList] = useState([]);
const [currentValue, setCurrentValue] = useState()
function handleChange(event) {
setCurrentValue(event.target.value)
}
function handleClick() {
updateList([...list, currentValue])
}
return (
<div className="container">
<div className="heading">
<h1>To-Do List</h1>
</div>
<div className="form">
<input name="entry" onChange={handleChange} type="text" />
<button type="button" onClick={handleClick}>
<span>Add</span>
</button>
</div>
<div>
<ul>
{list.map((res) => (
<li key={res}>{res}</li>
))}
</ul>
</div>
</div>
);
}
export default App;
此外,将onClick
移动到按钮在语义上(甚至对于用户体验)更有意义,但这取决于您。
您当前的代码有几个问题,我将简要描述并提供解决方案来解决这些问题。
listArray
变量。既然已经有一种状态,你应该定义另一种状态,或者把你的当前状态作为一个对象,把你的组件相关状态放在一个地方,我将采用第二种方法,因为它更优雅、更干净。const [state, setState] = useState({ list: [], input: "" });
setState((prev) => ({ ...prev, input: value })); // immediate return "({})" of an object with iterating through the previous values "...prev" and updating input "input: value"
注意:您可以在此处阅读有关扩展运算符(…
)的更多信息。
因此,您的句柄
和updateArray
函数如下所示:
function handleChange(event) {
const { value } = event.target;
setState((prev) => ({ ...prev, input: value }));
}
function updateArray() {
setState((prev) => ({ ...prev, list: [...state.list, state.input] }));
}
<button onClick={updateArray}> <!-- It's better to assign onclick action to an element with a function or arrow function to prevent it from running in the first render "(event) => updateArray(event)" -->
<span>Add</span>
</button>
<ul>
{state.list.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
工作演示:
问题内容: 我正在尝试找出如何创建输入验证的方法,在该方法中,您不能两次输入相同的数字,而且不能在数字范围内输入,除非它是整数,否则无法输入任何内容。我目前正在创建彩票程序,不确定如何执行此操作。任何帮助将非常感激。我的数字范围验证有效,而其他两个验证无效。我尝试了非重复号码验证,但我不确定如何执行仅数字验证。有人可以告诉我如何构建此结构。 此方法在我的Player类中 问题答案: 如下进行: 运
下面是我正在编写的代码。基本上我需要一个盒子来打开,让用户在相应的文本字段中输入数据。一切都很好。当我从actionPerformed方法打印它时,一切都输出正确,但是当我从main调用gui.displayPersonInfo方法时,它将所有的值显示为null。在盒子打开之前,它首先执行displayPersonInfo方法,尽管我在之后调用了该方法。有人知道我的代码有什么问题吗?(输出如下)
我正在尝试创建一个文字游戏,它可以对一个单词进行加密,并根据用户输入的内容将字符移位一定的数字,解密加密,并检查该单词是否为回文。问题是我不知道如何保持输入,所以在我加密或检查它是否为回文后,程序结束,因此我无法解密加密的内容。 例如,如果用户输入单词“hello”并选择加密该单词,密钥为3,则应显示“khoor”。然后,我希望能够通过将“khor”解密回“hello”来继续,但程序结束。 此外,
让我明确一点--我试图使用Twilio STUDIO来实现这一点--而不是编码。我有一个完整的IVR构建和工作,但我不知道如何保存呼叫者输入的选择(DTMF)。是否有一个简单的插件或addon可以节省用户输入?
这个问题我已经有一段时间了。我有3个inputEditTexts,要求用户输入他们的名字、姓氏和ID。我想把这些信息保存到googlefirestore中。我已经设置了所有依赖项,我知道我已经将其正确连接到googlefirebase。我发现的问题是,关于这个主题的每一个教程都是不同的,而且我所能找到的每个教程都不能100%发挥作用。有没有一种方法可以将这3个值保存到googlefirestore
我正在使用Java的扫描仪读取用户输入。如果我只使用nextLine一次,它可以正常工作。对于两个nextLine,第一个不等待用户输入字符串(第二个)。 输出: X:Y:(等待输入) 我的代码 你知道为什么会发生这种事吗?谢谢