reactjs - 如何将子组件中的表单中的数字添加到父组件中的数字数组中
问题描述
我正在尝试将子组件(AddNum.js)中的文本字段中的值添加到父组件(App.js)中的数字数组中。
为此,我在父组件中创建了一个 usestate 钩子“setValuesList”:
const [valuesList, setValuesList] = useState([]);
然后我像这样将钩子传递给子组件:
<AddNum valuesList={valuesList} setValuesList={setValuesList} />
我的子组件如下所示:
import React, { useState } from 'react';
const AddNum = ({ valuesList, setValuesList }) => {
const [value, setValue] = useState('');
const addNumber = (value) => {
const number = parseInt(value);
setValuesList([...valuesList, number]);
};
return (
<form onSubmit={addNumber}>
<input
type="text"
value={value}
onChange={(e) => setValue(e.target.value)}
></input>
<button>Add Number</button>
</form>
);
};
export default AddNum;
但是,当我在父组件中控制台记录“valuesList”并通过表单添加一个数字时,我得到一个空数组:
[]
有谁知道我做错了什么,我该如何解决这个问题?
我的存储库位于:
https://github.com/acandael/add-to-list
感谢您的帮助,
安东尼
解决方案
onSubmit
处理程序的第一个参数将event
. addNumber
作为提交处理程序传递给表单的函数的当前实现是完全不正确的。
解决方案创建一个新的提交处理函数并阻止默认的表单提交行为调用event.preventDefault()
,然后执行所有添加数字逻辑。
const AddNum = ({ valuesList, setValuesList }) => {
const [value, setValue] = useState('');
const addNumber = (value) => {
const number = parseInt(value, 10);
setValuesList(prev => [...prev, number]);
};
const submitHandler = (event) => {
event.preventDefault();
addNumber(value)
}
return (
<form onSubmit={submitHandler}>
<input
type="text"
value={value}
onChange={(e) => setValue(e.target.value)}
></input>
<button>Add Number</button>
</form>
);
};
Codesandbox中的工作演示
推荐阅读
- java - 当我单击行时,Java 编程我的数据无法显示
- c# - C#如何将数据从两个窗口窗体到一个数据库?
- android - Kotlin 调试未在 Visual Studio 代码中启动
- python - 如何更新绘图表达树形图以同时具有标签和绘图内的值?
- http - Android10 上连接到 IoT 设备主机的 Http 请求
- java - influxdb查询这么慢,如何提高性能
- java - CrudRepository 未获取必需列表,而是看到 PersistentBag 错误
- c# - Visual Studio 在运行 Xamarin 应用程序时无法找到 .NET.Core SDK
- php - Docker - 无法加载动态库“gd2”
- php - 什么是单句/点“。” 在 YAML 中是什么意思?