向下传递函数但保留 Parent 的道具
Pass A Function Down But Retain A Prop From Parent
我有 2 个组件。 parent 是一个映射列表。在每个地图渲染中,都有一个下拉菜单。下拉菜单组件有一个处理程序 prop,您可以将函数传递给该处理程序,它会将您单击的项目的数据发回给您。请参阅下面的简化代码。
const ParantList = () => {
const listData = [1,2,3]
const handleClick = (x, i) => {
// Here x will return data from the child
// i returns nothing but I would like it to be the current index of listData
return [x, i]
}
return (
<div>
{listData.map((x, i) => <Child handleClick={handleClick} /> )}
</div>
)
}
const Child = ({handleClick}) => {
const differentList = [4,5,6]
return (
<Dropdown>
{differentList.map(x =>
<Dropdown.Item onClick={()=>handleClick(x)}>
{x}
</Dropdown.Item>
)}
</Dropdown>)
}
问题出在 parent 中的 handle click 函数中,我需要将 child 中 differentList 中的数据传递给该函数,它工作正常。但是,我还需要在 parent 地图中单击 drop-down 的相应项目 (listData) 的索引或数据。因此 handleClick 函数需要来自两个列表的数据。
简单的解决方案是将 listData 列表的当前索引传递给 child。但是,实际上,child 组件是一个我不能(或不知道如何)更改函数处理程序的包。有没有一种简单的方法可以将函数传递给 child 但同时传递道具?谢谢!
只需将 listData 的索引传递给 handleClick
。
{listData.map((x, i) => <Child handleClick={(childX) => handleClick(childX, i)} /> )}
我有 2 个组件。 parent 是一个映射列表。在每个地图渲染中,都有一个下拉菜单。下拉菜单组件有一个处理程序 prop,您可以将函数传递给该处理程序,它会将您单击的项目的数据发回给您。请参阅下面的简化代码。
const ParantList = () => {
const listData = [1,2,3]
const handleClick = (x, i) => {
// Here x will return data from the child
// i returns nothing but I would like it to be the current index of listData
return [x, i]
}
return (
<div>
{listData.map((x, i) => <Child handleClick={handleClick} /> )}
</div>
)
}
const Child = ({handleClick}) => {
const differentList = [4,5,6]
return (
<Dropdown>
{differentList.map(x =>
<Dropdown.Item onClick={()=>handleClick(x)}>
{x}
</Dropdown.Item>
)}
</Dropdown>)
}
问题出在 parent 中的 handle click 函数中,我需要将 child 中 differentList 中的数据传递给该函数,它工作正常。但是,我还需要在 parent 地图中单击 drop-down 的相应项目 (listData) 的索引或数据。因此 handleClick 函数需要来自两个列表的数据。
简单的解决方案是将 listData 列表的当前索引传递给 child。但是,实际上,child 组件是一个我不能(或不知道如何)更改函数处理程序的包。有没有一种简单的方法可以将函数传递给 child 但同时传递道具?谢谢!
只需将 listData 的索引传递给 handleClick
。
{listData.map((x, i) => <Child handleClick={(childX) => handleClick(childX, i)} /> )}