首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ReactJS中从父组件的嵌套组件访问父组件方法

问如何在ReactJS中从父组件的嵌套组件访问父组件方法
EN

Stack Overflow用户
提问于 2019-07-14 21:43:43
回答 1查看 92关注 0票数 0

我有一个组件CreateOCSServiceForm,它从它的render方法调用另一个组件ListPage。此ListPage从其名为ListComponent的属性中期待一个名为NodeList的组件,并且NodeList再次从其名为Row的属性中期待一个组件NodeTableRow,如下所示-

代码语言:javascript
复制
 //Getting called from NodeList's attribute
const NodeTableRow: React.FC<NodeTableRowProps> = ({ obj: node, index, key, style, customData }) => {
return (
<TableRow index={index} trKey={key} style={style}>
  <td data-key="0" className="pf-c-table__check" role="gridcell">
    <input type="checkbox" checked={false}
      onChange={(e) => { onSelect(e, e.target.checked, index, node) }}
    />
  </td>
  <TableData>
    ---
  </TableData>
  <TableData>
   ---
  </TableData>
  <TableData>
     ----
  </TableData>
  <TableData>
    ----
  </TableData>
</TableRow>
 );
};

//Getting called from ListPage's attribute
const NodesList = props => <Table customData={props.data} {...props} Row={NodeTableRow} onSelect={onSelect} />;


//main component which is calling ListPage 
export const CreateOCSServiceForm: React.FC<CreateOCSServiceFormProps> = (props1) => {
 const title = 'Create New OCS Service';
 const [error, setError] = React.useState('');
 const [inProgress, setProgress] = React.useState(false);

 const [rowData, setRowData] = React.useState(null);

 const onSelect = (event, isSelected, virtualRowIndex, rowData1) => {
    console.log(rowData1, 'customData');
    console.log('isSelected', isSelected, 'virtualRowIndex', virtualRowIndex, 'rowData', rowData1);
    rowData[virtualRowIndex].selected = true;
    setRowData(rowData);
 };
return (
   <ListPage kind={NodeModel.kind} showTitle={false} ListComponent={NodeList} />}
   )
}

问题是NodeList和NodeTableRow组件必须访问在CreateOCSServiceForm组件上定义的onSelect方法,但是我应该如何向它们公开这个onSelect方法呢?我不想让onSelect方法成为全局方法,因为我必须在其中使用CreateOCSServiceForm`状态。我不能修改NodeList和ListPage组件,它的现有组件在我的代码库中,修改它会导致破坏其他页面。我们需要在NodeList组件中传递OnSelect属性的功能。

任何指导都将不胜感激。提前感谢

EN

回答 1

Stack Overflow用户

发布于 2019-07-14 23:16:41

给定约束条件:

  1. NodeList和NodeTableRow组件必须访问onSelect method

  1. 我无法修改NodeList和ListPage component

我假设ListPage已经支持onSelect属性:

代码语言:javascript
复制
return (
  <ListPage onSelect={onSelect} kind={NodeModel.kind} showTitle={false} ListComponent={NodeList} />
)

或者其他传递方法的方式(但您需要查看文档),例如:

代码语言:javascript
复制
return (
  <ListPage options={{ListComponentOnSelect: onSelect}} ... />
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57027951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档