首页 程序笔记 react-beautiful-dnd Invariant failed: Cannot find droppable entry with id

react-beautiful-dnd Invariant failed: Cannot find droppable entry with id

使用react-beautiful-dnd做拖拽效果,但是根据示例代码运行后,指点拖动元素就会报错:

Uncaught runtime errors:

ERROR

Invariant failed: Cannot find droppable entry with id [droppable]

从GitHub和stackoverflow上找到了相关的问题。引起报错的原因是因为 React 18 StrictMode 严格模式。

StrictMode是一种让你知道代码中是否可能犯错误的方法。不幸的是,将严格模式与react-beautiful-dnd一起使用会导致令人沮丧的 无法找到带有id的可拖动对象:[...] 的错误。

下面有两种解决方法,推荐使用第二种。

1 关闭严格模式 React.StrictMode

可以通过从应用程序中删除严格模式来简单地解决此问题。

修改方法是修改根目录下的index.js文件

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
);
// 去掉 <React.StrictMode> ,改为
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <BrowserRouter>
      <App />
    </BrowserRouter>
);

这个方式实测有效,但是不推荐。

2 封装一个自定义Dropable组件

import { useEffect, useState } from "react";
import { Droppable } from "react-beautiful-dnd";

export const CustomDroppable = ({ children, ...props }) => {
  const [enabled, setEnabled] = useState(false);
  useEffect(() => {
    const animation = requestAnimationFrame(() => setEnabled(true));
    return () => {
      cancelAnimationFrame(animation);
      setEnabled(false);
    };
  }, []);
  if (!enabled) {
    return null;
  }
  return <Droppable {...props}>{children}</Droppable>;
};

用CustomDroppable替代原来的Droppable组件,实测完美解决。

1

站心网

使用react-beautiful-dnd做拖拽效果,但是根据示例代码运行后,指点拖动元素就会报错: Uncaught runtime e..

为您推荐

.Net报错Could not find a part of the path bin\roslyn\csc.exe

维护一个老网站,用vs2022打开后build能成功,但是在IIS里运行的时候会报错:Server Error in '/' Application.Could not find a part of the path '...\bin\roslyn\csc.exe'.Description: An unhan..

react使用echart图文教程

可以参考ECharts官网的文档:https://echarts.apache.org/handbook/zh/basics/import在React中使用ECharts可以通过以下步骤:安装ECharts库使用npm或者yarn安装ECharts库:npm install echarts --save引入ECharts库..

react前端基础面试题和答案

当面试React前端开发岗位时,以下是一些基础面试题及其可能的答案示例:什么是React?答:React是一个用于构建用户界面的JavaScript库,由Facebook开发并维护。它采用组件化的开发模式,使得构建复杂的UI变得更加可..

在IIS部署React前端项目

在IIS上部署React前端项目,在不是根路径的时候刷新页面会404,可以通过url rewrite设置解决这个问题。首先在react项目中运行npm run build打包项目。然后在IIS上创建一个站点,把build文件夹里的内容拷贝到站点文件..

@testing-library/react单元测试getBy queryBy和findBy的区别

关于查询查询是测试库提供的在页面上查找元素的方法。 有几种类型的查询(“get”、“find”、“query”); 它们之间的区别在于,如果没有找到元素,查询是否会抛出错误,或者它是否会返回一个 Promise 并重试。 根..

React获取url参数的几种方法

在React中获取URL参数的方法有以下几种:使用window.location.searchconst searchParams = new URLSearchParams(window.location.search);const id = searchParams.get('id');使用react-router-dom如果使用了react-r..

react监听路由变化

在React中,你可以使用React Router来处理路由,同时你可以通过监听路由变化来执行特定的操作。React Router提供了一个 useEffect 钩子,可以用来监听路由的变化。以下是一个示例,展示如何在React中在路由变化时执..

react hooks获取url参数

在 React 中使用 Hooks 来获取 URL 参数可以通过使用 React Router 库来实现。React Router 是一个流行的用于处理路由的库,它允许你在应用中管理不同的页面和路由。以下是如何使用 React Router 和 Hooks 来获取 UR..

react单元测试模拟点击浏览器返回按钮时触发popstate事件

要在React单元测试中模拟点击浏览器返回按钮时触发popstate事件,你可以使用jsdom库来模拟浏览器环境。以下是一个示例,展示如何在测试中模拟点击浏览器返回按钮并触发popstate事件:假设你有一个组件,名为MyCompon..

react基础面试问题

当准备面试React开发职位时,以下是一些可能会问到的10个常见React面试基础问题:什么是React?解释React是一个JavaScript库,用于构建用户界面。它通过组件化的方式使开发者能够构建交互性强、可重用的UI组件。Reac..

react获取url参数 忽略参数名大小写

要在 React 中获取 URL 参数并忽略参数名的大小写,你可以使用 JavaScript 的 URLSearchParams 对象来处理 URL 查询参数。这将允许你在参数名上执行不区分大小写的比较。以下是一个示例:import { useEffect } from ..

react获取url参数不区分大小写

在React中,获取URL参数可以使用window.location.search属性来获取查询字符串,然后使用JavaScript的方法来解析它。要实现不区分大小写的参数获取,你可以先将查询字符串转换为小写,然后再进行匹配。以下是一个示例..

前端学react还是vue?

React 和 Vue 是两个最受欢迎的前端 JavaScript 框架之一,它们都可以用于构建交互性强、单页应用(SPA)等现代Web应用程序。前端学react还是vue?这取决于您的个人需求和偏好。React 和 Vue 都是流行的前端框架,都..

如何在React中使用Redux?

Redux 是一个用于 JavaScript 应用程序的状态管理库。它是一个可预测状态容器,可以帮助你管理应用程序中的所有状态,并保持状态的一致性。在React中使用Redux可以帮助你管理应用程序的全局状态。以下是一些基本步骤..

react mock settimeout

在 React 测试中,你可以使用 Jest 和测试工具库(如 React Testing Library)来模拟 setTimeout 函数的行为。以下是一个示例:假设你有一个组件 DelayedComponent,其中包含一个在延迟后更新状态的函数:import Rea..

typescript react最佳实践

当在 React 项目中使用 TypeScript 时,以下是一些最佳实践:使用函数式组件和 Hooks函数式组件和 Hooks 是现代 React 开发的推荐方式,也是与 TypeScript 结合使用的最佳实践。import React, { useState } from 're..

react与next.js的关系

React 和 Next.js 是两个不同的 JavaScript 框架,但它们可以一起使用来构建复杂的 Web 应用程序。React 是一个用于构建用户界面的 JavaScript 库。它使用声明式编程来描述用户界面的状态和行为。Next.js 是一个基于..

react安装和使用Material-UI

目前React官网已经推荐使用Next.js框架。Next.js 是一个全栈式的 React 框架。它用途广泛,可以让你创建任意规模的 React 应用——可以是静态博客,也可以是复杂的动态应用。要创建一个新的 Next.js 项目..

git RPC failed; curl 18 transfer closed with outstanding read data remaining 是什么错误?

错误消息 "RPC failed; curl 18 transfer closed with outstanding read data remaining" 是与 Git 操作的网络传输相关的错误。这通常是由于网络问题引起的,可能是由于网络连接不稳定、网络防火墙配置问题、代理设..

react修改useState对象属性页面不重新渲染

如果在 React 中修改了 useState 返回的对象的属性,但是页面没有重新渲染,有几个可能的原因:浅比较问题: React 中的状态更新是基于浅比较的。如果修改对象属性时,返回的对象引用没有发生变化,React 可能会认为..

发表回复

返回顶部