javascript - 子组件在渲染时调用父函数
问题描述
我有一个名为“Display”的组件,其函数“selectRow(param)”被传递给“Row”组件,以便在单击 Row 上的按钮时调用,但一旦呈现“Row 的组件”,该函数叫做。如何将“selectRow”函数设置为仅在单击按钮时调用?
展示
import React, { useState } from 'react';
import Row from './Row';
import { generateRows, rearrangeCards } from '../helpers';
function Display({ displayDeck }) {
const [deck, setDeck] = useState(displayDeck);
const selectRow = (param) => {
console.log(param)
}
let rows = generateRows(deck);
return (
<div>
{
Object.keys(rows).map((key, index) => {
return <Row rowDeck={rows[key].deck} selectRow={selectRow} rowId={rows[key].id} key={index} />
})
}
</div>
);
}
export default Display;
排
import React from 'react';
function Row({ rowDeck, selectRow, rowId }) {
function handleClick() {
selectRow(rowId)
}
return (
<div className="rowContainer">
<button type="button" id="card" onClick={handleClick()} className="rowButton">Shuffle</button>
{rowDeck.map((card, index) => {
return (
<img
key={index}
width="100"
alt={`card: ${card.value}-${card.suit}`}
src={card.image}
className="image"
/>
);
})}
</div>
);
}
export default Row;
解决方案
这个
onClick={handleClick()}
应该:
onClick={handleClick}
您传递给onClick
事件处理程序的是对函数的引用,该函数将在事件被触发时调用。无需在 { 花括号 } 内调用函数,因为它会立即执行。
推荐阅读
- c++ - 引用临时成员
- c# - 防止修改缓存对象
- html - 如何使 100% 高度的 div 扩展到 HTML/CSS 中的滚动溢出?
- reactjs - 带有 Sanctum 身份验证的 Laravel 8 (Reactjs SPA)
- c# - 如何使用自定义 XSD 架构编写 XML?
- azure - Runbook 将 Powershell 运行为 azure 帐户
- reactjs - 如果在资源管理器中重命名文件/组件,则跨项目自动重命名它
- python - thriftpy2 - TSocket 读取 0 个字节
- pandas - Selenium Loop 将多个表附加在一起
- c# - 有没有办法为 String C# 中包含的元素执行代码?