![](/img/trans.png)
[英]How to use React.forwardRef() in in functional component react js
[英]Calling a functional forwardRef component React
我正在構建一個組件,它調用一個通過道具傳遞的組件。 該組件在其中使用前向引用,因此我無法調用它。 它顯示itemComponent
。
代碼:
父組件:
export default function DNDList({
items,
idKey = 'id',
itemComponent,
listStyles,
hideParentList
}) {
const [state, dispatch] = useReducer(dndReducer, items);
const previewRef = useRef(null);
const onMove = (dragIndex, hoverIndex) => {
dispatch({
type: 'switch',
data: {
to: hoverIndex,
from: dragIndex
}
});
};
console.log(itemComponent);
const renderItems = () => (
<>
{state.map((item, i) => (
<Item previewRef={previewRef} id={item[idKey]} key={item[idKey]} index={i} onMove={onMove}>
{/* Main Code, Item Component is a forward Ref, see example below */}
{itemComponent ? itemComponent({ item, ref:previewRef }) : item[idKey]}
</Item>
))}
</>
);
return hideParentList ? (
renderItems()
) : (
<ul className={listStyles}>{renderItems()}</ul>
);
}
itemComponent
示例:
const TemplateListBlock = forwardRef(({ item }, ref) => {
const onRemoveSender = () => {};
console.log(ref);
return (
<li className={`${styles.contentBlock}`} data-template="true">
<div className="drag-handler no-select" ref={ref}>
<Menu />
</div>
<div className={styles.templateSettings}>
<TemplateSenderOptions message={item} onRemoveSender={onRemoveSender} />
</div>
<p className={commonStyles.senderWrapper}>
<span className={commonStyles.sender}>{item.from}</span> will appear
here.
</p>
</li>
);
});
第一個組件中使用的組件:
function Item({ id, index, onMove, children }) {
const ref = useRef(null);
drag(drop(ref));
return (
<li style={{ opacity }} key={id} ref={ref} data-handler-id={handlerId}>
{children}
</li>
);
}
而不是像這樣傳遞previewRef
: <Item previewRef={previewRef}...
嘗試像這樣傳遞它: <Item ref={previewRef}...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.