【发布时间】:2021-05-26 05:05:57
【问题描述】:
我正在做一些反应,遇到了一个我自己无法解决的挑战。我在这里和其他地方搜索过,我找到了标题相似的主题,但与我遇到的问题没有任何关系,所以我们开始吧:
所以我有一个数组,它将被映射到 React、组件中,通常是这样的:
export default ParentComponent = () => {
//bunch of stuff here and there is an array called arr
return (<>
{arr.map((item, id) => {<ChildComponent props={item} key={id}>})}
</>)
}
但问题是,父元素中有一个状态,它存储当前选择的其中一个 ChildComponents 的 id(我通过设置上下文并在 ChildComponent 中设置此状态来做到这一点),然后问题是我必须引用当前选择的 ChildComponent 内部的一个节点。我可以转发 ref 没问题,但我也想只在当前选择的 ChildComponent 上分配 ref,我想这样做:
export default ParentComponent = () => {
//bunch of stuff here and there is an array called arr and there's a state which holds the id of a selected ChildComponent called selectedObjectId
const selectedRef = createRef();
return (<>
<someContextProvider>
{arr.map((item, id) => {
<ChildComponent
props={item}
key={id}
ref={selectedObjectId == id ? selectedRef : null}
>
})}
<someContextProvider />
</>)
}
但我已经尝试过了,但我们做不到。那么,如果某个条件为真,如何动态地将 ref 分配给数组的一个特定元素呢?
【问题讨论】:
-
使用 React ref 来存储相当于活动 id 的内容似乎是对 React ref 的不好使用,特别是考虑到您已经在使用 React 上下文......为什么不只访问每个孩子的上下文并将活动 id 与子组件的 id 匹配?
-
实际上我正在使用来自@react-three/fiber 和后处理的SelectiveBloom 效果,为了实现这一点,SelectiveBloom 需要一个网格参考,它会应用bloom。所以我需要对于每个 ChildComponent,如果选定的组件 id 是这个 ChildComponent 的 id,我想将其中的网格的 ref 传递给父组件中的 SelectiveBloom 效果。换句话说,我只想在所选对象中应用 SelectiveBloom。
标签: reactjs react-hooks react-ref