Javascript 如何删除元素';从列表中筛选后的s ref

Javascript 如何删除元素';从列表中筛选后的s ref,javascript,html,reactjs,react-hooks,ref,Javascript,Html,Reactjs,React Hooks,Ref,我正在将一组“砖块”对象渲染为组件上的一个简单div。 我还使用useRef保存所有砖块的ref,当每个砖块元素都保存在“brickRefs”对象的id下时 在某些情况下,我会过滤我的数组,以便它在屏幕上呈现更少的“砖块” 我的问题是:在过滤数组时,我没有删除从“brickRefs”对象中过滤的元素,而是看到它仍然存在,值为null 什么是将其从ref对象中完全移除的正确方法 //initial ref and state: const bricksRef = useRef({}); cons

我正在将一组“砖块”对象渲染为组件上的一个简单div。 我还使用useRef保存所有砖块的ref,当每个砖块元素都保存在“brickRefs”对象的id下时

在某些情况下,我会过滤我的数组,以便它在屏幕上呈现更少的“砖块”

我的问题是:在过滤数组时,我没有删除从“brickRefs”对象中过滤的元素,而是看到它仍然存在,值为null

什么是将其从ref对象中完全移除的正确方法

//initial ref and state: 
const bricksRef = useRef({});
const [bricks, setBricks] = useState([]);
   

  useEffect(() => {
    // initializing bricks data
    const bricksData = getBricks(NUMBER_OF_BRICKS);
    setBricks(bricksData);
}, [])

// filtering the array under some conditions :
const isHittedBrick = (nextTopPos, nextLeftPos) => {     
    const brickHitted = Object.entries(bricksRef.current).filter(([key, value]) => {
        ... returning true under some conditions
    }).map(([id]) => id)
    setBricks(bricks => bricks.filter(b => !brickHitted.includes(b.id)))
}

//render while setting all divs into the refs object:
   return (
    <section className='bricks'>
        {
            bricks.map(b => {
                return <div key={b.id} className='brick' ref={ref => bricksRef.current[b.id] = ref}>
                    {b.id}
                </div>
            })
        }
    </section>
)
//初始引用和状态:
const bricksRef=useRef({});
const[bricks,setBricks]=useState([]);
useffect(()=>{
//初始化砖块数据
const bricksData=getBricks(砖的数量);
立根立杆(砖块数据);
}, [])
//在某些情况下过滤阵列:
const ishitedbrick=(nextTopPos,nextLeftPos)=>{
const brickHitted=Object.entries(bricksRef.current).filter([key,value])=>{
…在某些情况下返回true
}).map(([id])=>id)
setBricks(bricks=>bricks.filter(b=>!brickHitted.includes(b.id)))
}
//在将所有div设置为refs对象时进行渲染:
返回(
{
bricks.map(b=>{
返回bricksRef.current[b.id]=ref}>
{b.id}
})
}
)

过滤器
上,就在
返回
之前,从ref对象中删除

const brickHitted = Object.entries(bricksRef.current).filter(([key, value]) => {
        if (false under some conditions) delete bricksRef.current[key] // if I understand correctly and b.id === key
        ... returning true under some conditions
    }).map(([id]) => id)

有关
delete

的详细信息,请访问
过滤器
,就在
返回
之前,从ref对象中删除
false

const brickHitted = Object.entries(bricksRef.current).filter(([key, value]) => {
        if (false under some conditions) delete bricksRef.current[key] // if I understand correctly and b.id === key
        ... returning true under some conditions
    }).map(([id]) => id)

关于
delete

直接变异refs对象没有问题吗?实际上
bricksRef.current[b.id]=ref
也在直接变异:)你是对的(:删除感觉有点硬哈哈..谢谢直接变异refs对象没有问题吗?实际上
bricksRef.current[b.id]=ref
也在直接变异:)你是对的(:删除感觉有点硬哈哈..谢谢