使用react+react-dnd实现了类似上图的效果,不过目前的问题是,现在只能实现往后追加,不能实现从中间插入,如果要实现从中间插图需要获取右边每个子组件的位置
由于右边的效果是通过遍历实现的,所以通过ref的方法只能拿到最后一个元素的位置信息
const elRef = useRef()import designComponents from './components'//。。。 const [{ canDrop }, drop] = useDrop({ accept: 'card', canDrop: (_item, monitor) => { const hoverBoundingRect = elRef.current?.getBoundingClientRect() //这里每次输出拿到的都是最后一个子组件的位置** console.log(' DropSquare hoverBoundingRect:', hoverBoundingRect) return true }, collect: (monitor) => ({ canDrop: !!monitor.canDrop(), }), })<div className='design-main' ref={drop}> {dropLists.map((item, index) => { const El = designComponents[item.element] return ( // eslint-disable-next-line react/no-array-index-key <div ref={elRef} key={`${item}-${index}`}> <El /> </div> ) })} </div>
import React, { useRef, useMemo } from 'react';import { useDrop } from 'react-dnd';const MyComponent = ({ dropLists }) => { const elRefs = useMemo( () => Array.from({ length: dropLists.length }, () => React.createRef()), [dropLists.length] ); const [{ canDrop }, drop] = useDrop({ accept: 'card', hover: (item, monitor) => { const index = monitor.getItem().index; const hoverBoundingRect = elRefs[index]?.current?.getBoundingClientRect(); console.log('Hovered Element Position:', hoverBoundingRect); 其他逻辑,比如插入位置的判断 }, collect: (monitor) => ({ canDrop: !!monitor.canDrop(), }), }); return ( <div className='design-main' ref={drop}> {dropLists.map((item, index) => { const El = designComponents[item.element]; return ( <div ref={elRefs[index]} key={`${item}-${index}`}> <El /> </div> ); })} </div> );};
本文向大家介绍react中怎样阻止组件渲染?相关面试题,主要包含被问及react中怎样阻止组件渲染?时的应答技巧和注意事项,需要的朋友参考一下 在极少数情况下,你可能希望能隐藏组件,即使它已经被其他组件渲染。若要完成此操作,你可以让 方法直接返回 ,而不进行任何渲染。
问题内容: 在React JSX中,似乎无法执行以下操作: 我收到一个解析错误:意外令牌{。这不是React可以处理的吗? 我正在设计此组件,以便在内部隐藏的值将包含有效的HTML元素(h1,p等)。有什么办法可以使这项工作吗? 问题答案: 您不应该将组件子弹放在花括号中: 这是一个有效的小提琴:http : //jsfiddle.net/kb3gN/6668/ 此外,您还可以找到JSX编译器,有
问题内容: 我有一个React组件,其中有许多子组件。我不希望立即渲染子组件,而是要经过一段时间的延迟(对于每个子组件而言,它们是统一的还是不同的)。 我想知道-有没有办法做到这一点? 问题答案: 我认为最直观的方法是给孩子一个“ wait” ,在从父代传递过来的持续时间内隐藏该组件。通过将默认状态设置为隐藏,React仍会立即渲染组件,但是直到状态更改后它才可见。然后,您可以设置为调用一个函数,
问题内容: 我有一个要显示字符串数组的组件。代码看起来像这样。 运行正常。例如,如果 props.data = [‘tom’,’jason’,’chris’] 页面中呈现的结果将为 tomjasonchris 然后,我想使用逗号连接所有名称,因此我将代码更改为 但是,渲染的结果是 [Object],[Object],[Object]。 我不知道如何解释对象成为要渲染的反应组件。有什么建议吗? 问题
问题内容: 我有一些称为站的数据,它是一个包含对象的数组。 我想为每个数组位置渲染一个ui组件。到目前为止,我可以写 然后渲染 问题是我要打印所有数据。相反,我只想显示一个像这样的键,但是什么也不打印。 如何遍历此数据并为数组的每个位置返回一个新的UI元素? 问题答案: 您可以将工作站列表映射到ReactElements。 使用React> = 16时,可以从同一组件返回多个元素,而无需额外的ht
问题内容: 我想从自己的组件中递归添加一个react组件。我看到了一个树组件的示例,该组件通过子TreeNode进行映射并以相同方式添加子节点。不幸的是,这对我根本不起作用。这个想法是要有一个简单的注释组件,而答复将重用相同的组件。 我收到以下错误消息: 未捕获的TypeError:无法构造“注释”:请使用“ new”运算符,此DOM对象构造函数不能作为函数调用。 这是传递给组件的JSON数据的示