javascript - 如何使用 React 钩子从数组中删除一个项目?
问题描述
我正在尝试在 React 中创建一个可编辑的列表,并带有删除某些条目的选项。编辑按预期工作:
function handleChange(i){
let newArr = [...entries];
newArr[i].body = event.target.value;
setEntries(newArr);
}
但是如果我尝试实现删除:
let newArr = [...entries];
newArr.splice(i, 1);
setEntries(newArr);
React 抛出以下错误:
渲染的钩子比预期的要少。这可能是由于意外提前退货声明造成的。
我是 React 的新手,所以可能这很明显,因此我为这个问题道歉。老实说,我在问之前用谷歌搜索了很长时间:) 任何建议将不胜感激!
解决方案
离开评论:
“我发现这个 bug 是由 JSX 中的动画引起的:style={useSpring({ fontSize: handleFontSize(i, txt.level) }) }> ` 之所以如此,是因为它使用了钩子,对吗?如何是否有可能让动画继续工作?非常感谢!
您需要将 useSpring 挂钩移到渲染之外(您可以将它放在组件的顶部):
const springStyles = useSpring({ fontSize: handleFontSize(i, txt.level) })
然后在组件属性中使用该常量:
style={springStyles}
推荐阅读
- php - 在订单电子邮件和订单编辑页面中显示复选框字段数据
- wordpress - 如何在将来发布时显示自定义帖子类型
- polymer - 如何检查影子 DOM 中组件的(初始)渲染状态(而不是更新状态)
- javascript - 量角器:如何检测是否打开了意外警报
- sql - Postgresql:在字符串的括号内查找和替换多个字符
- python-sphinx - 狮身人面像文档 | 能支持Algolia的Doc Search吗
- html - 不可见元素阻碍菜单
- docker - 据说 Docker 正在主机操作系统上运行,但我们仍然从基础映像构建 docker 文件,比如 Ubuntu?这不是在 docker 容器中运行的操作系统吗?
- matlab - 将网格纬度和经度数据转换为 1×2 行的 lat 和 lat vs lon 数据
- sql - Hive 嵌套的 get_json_object 在选择查询中工作正常,但在创建表中返回 null 作为选择查询 - 奇怪的行为