reactjs - 从表中删除值
问题描述
我的应用程序有一个包含不同数据的选择和一个我从选择中添加数据的表。这里出现了一个问题:在表格中添加所有选择的数据并从表格中删除数据后,当我从输入中仅选择一个值并单击保存时,表格中的最后一个值再次出现,即使我只选择了一个。
这样我删除:
const handleDelete = name => {
setData(data.filter(item => item.name !== name));
};
如何解决这个问题?链接到我的应用程序:https ://codesandbox.io/s/serene-hamilton-go4m3
解决方案
首先,我发现您没有在子句柄删除中更新父状态。您使用 newPlayer 作为 Table 的状态,但不要更新它。现在看起来像这样:
/* index.js
add new function handleDelete and change table properties*/
const handleDelete = name => {
const updSaved = savedPlayer.filter(item => item !== name);
setnewPlayer(searchPlayer(updSaved));
setSavedPlayer(updSaved);
};
........
<MyTable newPlayer={newPlayer} deletePlayer={handleDelete} />
.......
/* MyTable.js
edit function handleDelete and change table class*/
const MyTable = ({ newPlayer, deletePlayer }) => {
.....
const handleDelete = name => {
deletePlayer(name);
};
现在它工作得很好。而且,我提到了您的选择输入的问题。它无法正常工作,请检查您的过滤器逻辑以获取选项。
祝你好运!
UPD
靠近这条线:
const finalListOfParticipants =
teamPlayer === undefined ? newPlayer : newPlayer.concat(teamPlayer);
有两个不同的对象。您的 newPlayer 来自您的选择菜单,newPlayer.concat(teamPlayer); 来自预加载的数据。你有一键删除。您要清除 onClick 哪个对象?我的解决方案仅使用选择菜单和 newPlayer 列表。如果要同时使用这两个列表,则需要将所有逻辑转移到父组件SelectWithHiddenSelectedOptions。MyTable 是一个子组件。我无法想象我该如何解释清楚。
推荐阅读
- linux - 如何在 Linux 交叉编译项目的 Visual Studio 中添加库?
- javascript - 如何在不刷新当前页面上的 Youtube 视频的情况下获取数据
- c# - 根据条件对结果进行分组
- assembly - 生成外壳时的程序集段错误
- python - Python 3.6:csvwriter 只写入前两个字符串
- streaming - 只有一个 CPU 内核处理网络中断
- jupyter-notebook - Jupyterlab 扩展离线安装
- c++ - 如何解决自定义类对象的 unordered_set hasher 函数中的这个错误?
- oauth - Dart:客户端的 Websocket Bearer 身份验证
- oracle - 在 INSERT 语句中使用绑定变量