[英]How to call child component method from parent component in react?
父組件中有一系列反應組件。 在父組件上的某些事件上,我想遍歷子組件數組並為每個子組件調用一個方法。 我怎樣才能做到這一點? 似乎它不像在香草 JS 中那樣工作,你有一個 class 的實例並簡單地調用一個方法。 所以這里是簡化的代碼:
const Item = props => {
const value = () => 'result!';
return (
<div></div>
)
}
const App = props => {
const items = props.items.map(item => <Item key={uuid()} item={item} />)
const run = e => {
items.map(item => console.log(item.value()))
}
return (
<button onClick={run} type="button">Run!</button>
)
}
const items = [
'Lorem ipsum dolor sit amet',
'consectetur adipiscing elit'
];
ReactDOM.render(<App items={items} />, document.querySelector("#app"))
我用這段代碼創建了一個 jsfiddle - https://jsfiddle.net/jkLq26pg/37/在第 11 個字符串上,方法 value() 被調用並引發錯誤。 但是記錄item.props
可以工作並為每個項目輸出道具。 為什么不調用方法? 請向我提供如何使其工作的建議。
在您的情況下,您必須通過數組 map 並使用回調 ref 附加一個 ref 。 使用forwardRef渲染子組件並使用useImperativeHandle掛鈎將 function 暴露給父組件。
代碼片段
const Item = forwardRef((props, ref) => {
useImperativeHandle(ref, () => ({
value: () => "result!"
}));
return <div ref={ref} />;
});
const itemsz = ["Lorem ipsum dolor sit amet", "consectetur adipiscing elit"];
const App = props => {
const ref = useRef({});
const items = itemsz.map((item, index) => {
return (
<Item
ref={r => (ref.current[index] = r)}
key={index}
item={item}
/>
);
});
const run = e => {
items.map((item, index) => console.log(ref.current[index].value()));
};
return (
<>
<h3>click run and see console log</h3>
<button onClick={run} type="button">
Run!
</button>
{items}
</>
);
};
注意- 盡量避免這種模式。
解決此問題的一種方法是編寫useEffect
並在該useEffect
中調用您的item.value()
邏輯。 一旦您的列表已安裝到 DOM,您的 function 將被自動調用。 這可能是調用 function 的正確位置,因為您的列表將在 DOM 內呈現,然后可以處理副作用。
const Item = props => {
const value = () => 'result!';
// Handle your side effects here
useEffect(() => {
value();
}, []);
return (
<div></div>
)
}
這個 useEffect 將在組件掛載到 DOM 節點后起作用。 您始終可以將 function 放在基於 class 的組件中的生命周期方法之一或功能組件中的掛鈎中,並根據您的情況從那里調用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.