【发布时间】:2021-12-14 22:02:26
【问题描述】:
我正在为我正在进行的项目使用 React 钩子。我遇到了一种情况,我想在 useState 挂钩中使用数组,但我不确定如何执行此操作。
我创建了一个表格,它根据一个月的天数动态更改其列数。
我尝试过这样的事情:
const [inText, setInText] = useState([]);
const inputText = (e) => {
setInText([...inText,{
id:inText.length,
value:e.target.value
}]);
}
numberOfDays 是我计算的一个变量。它包含当月的天数。
const renderINP = () => {
let td = [];
for (let i = 1; i <= numberOfDays; i++) {
td.push(<td key={i}><input type="text" onChange={inputText} /></td>);
}
return td;
};
这是将表格呈现给浏览器的代码:
<table>
<tbody>
<tr className="work-days">
<td>Working days</td>
{renderINP()}
</tr>
</tbody>
</table>
我尝试用 cosole.log(inText) 捕捉“inText”。当我在输入中输入某些内容时,例如 0,它会创建一个对象 {id: 0, value: '0'}。当我再次输入时,它会创建两个对象 {id: 0, value: '0'} 和 {id: 1, value: '0.'}。此外,当我删除某些内容时,它会创建另一个对象。
如何为每个输入只创建一个对象,以及如何分别获取每个 inText 的值?例如,在第二个输入中获取 inText 的值,而不是所有对象的值。
【问题讨论】:
-
numberOfItems是什么?你在哪里设置它?是状态变量吗? -
我不太清楚你的意图是什么,但听起来你需要使用 useReducer 而不是 useState。
-
你的意思是 numberOfDays 我认为,它是一个包含当月天数的变量,我从函数返回当月天数 @AntonioPantano 得到它
-
@code90 例如,如果我想在第一个输入中输入 0.5,它将在数组中创建一个对象,该对象将具有三个不同的 id 和值,值将是“0”和“。”和 '5' ,如何避免这种情况并在数组中只创建一个值为 '0.5' 的对象
-
对,这就是为什么我说它不会解决您的问题。你需要一个更好的解决方案。 useReducer 应该是要走的路。我可能会在当天晚些时候提供解决方案。
标签: javascript reactjs react-hooks jsx