[英]React v16 – pass ref from child to parent through a wrapper component
我有一個現有的組件層次結構,如下所示:
const Parent = props => {
const divElement = useRef()
// do something with divElement
return <Child ref={divElement} {...some props} />
}
const Child = React.forwardRef((props, ref) => {
return <div ref={ref}><some stuff here></div>
}
這一切都很好,但是現在我需要有條件地添加一個包裝器組件,它包裝<Child>
組件以添加一些特殊情況的道具。
基本上我想要的是這樣的:
const Parent = props => {
const divElement = useRef()
// do something with divElement
return someCondition ? <Wrapper {...some props} /> : <Child ref={divElement} {...some props} />
}
const Wrapper = props => {
return <Child {...different props} />
}
const Child = React.forwardRef((props, ref) => {
return <div ref={ref}><some stuff here></div>
}
我一直堅持如何將Child
通過Wrapper
的ref
傳遞回Parent
,因此無論Wrapper
是否存在, Parent
都可以訪問Child
的ref
......
您不應該將任何東西從孩子傳遞給父母。 當然你可以使用回調,但你不會使用它們來傳遞 refs 或類似的東西。
您只需要將 Wrapper 也設為 ForwardRef:
const Wrapper = React.forwardRef((props, ref) => {
return <Child ref={ref} {...your other props} />
})
現在你可以打電話:
return someCondition ? <Wrapper ref={divElement} {...some props} /> : <Child ref={divElement} {...some props} />
你的 ref 將永遠是你想要的 div。
除了像@Reductio 說的那樣使用React.forwardRef
之外,您還可以使用自定義道具將 ref 傳遞給孩子,無論是否使用 Wrapper。
我從這里學到了這一點: https://deniapps.com/blog/clarify-react-ref-by-examples通過自定義道具傳遞 ref 要簡單得多。 代碼是這樣的:
const Parent = props => {
const divElement = useRef()
// do something with divElement
return someCondition ? <Wrapper {...some props} forwardedRef={divElement} /> : <Child forwardedRef={divElement} {...some props} />
}
const Wrapper = props => {
//MAKE SURE "different props" includes the custom props: forwardedRef from props
return <Child {...different props} />
}
const Child =({forwardRef, ...rest}) => {
return <div ref={forwardedRef} {...rest}><some stuff here></div>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.