我对办公室非常陌生 - 反应和反应一般如此,如果我做错了,请不要犹豫,给我指点。
虽然我的要求相当简单,但我无法理解。
我有一个带有列表视图的页面(officeList -Ui-fabric-reactjs的DetailsList组件),这个DetailsList从API端点获取它的项目,该工作正常:
componentDidMount() {
_items = []
// Get list of Mediums, then push it to the _items array
axiosTRS.get('/media').then(response => {
response.data.map(item => {
_items.push({ id: item.mediumID, name: item.name, imo: item.imo })
})
this.setState({ items: _items })
})
}
详情列表正在填写完整。但是,现在我想为每一行添加一个“编辑”按钮,所以这不是单独的列。
我想我会在详细列表呈现的onRenderRow
属性上执行此操作:
render() {
return (
<div>
<Panel panelHeaderName={'Medium Overview'}>
<div>
<MarqueeSelection selection={this.selection} >
<DetailsList
onRenderRow={this.onRenderRows}
onRenderDetailsHeader={this.onRenderColumn}
selection={this.selection}
selectionMode={this.state.selectionMode}
onColumnHeaderClick={this.sorting}
onColumnResize={this.columnResizer}
layoutMode={DetailsListLayoutMode.justified}
className='customPanel'
columns={this.state.columns}
items={this.state.items}
// onRenderItemColumn={ this._onRenderColumn }
/>
</MarqueeSelection>
<br />
<div align="right">
</div>
</div>
</Panel>
</div>
)
}
在onRenderRows
函数中,我首先获取所有DetailsRow
道具,然后添加“编辑”按钮:
onRenderRows(props) {
return (
<div>
<DetailsRow
{...props}
/>
<PrimaryButton
onClick={() => {
alert(props.item.name)
}}
text='click me'
/>
</div>
)
}
问题是按钮会一直显示在包含数据的行下方。我应该通过添加css
来解决这个问题,或者在同一行上获取按钮的最佳选择是什么?
有没有更简单的方法来实现这一目标?我还尝试/研究了为按钮添加额外列的选项,但我不认为这是可行的方法,而且我也没有这样做。
作为旁注,我使用ES6而不是TSX的面料组件(你可能已经注意到了)。
答案 0 :(得分:1)
Add this function
private _onRenderItemColumn(item: any, index: number, column: IColumn): JSX.Element {
if (column.fieldName === 'fieldName') {
return <Link data-selection-invoke={true}>{"Edit"}</Link>;
}
return item[column.fieldName];
}
答案 1 :(得分:-1)
< DetailsList />
的onItemInvoked()< DetailsList />
的设置列反应成分:
constructor(props: {}) {
super(props);
this._columns = [
{ key: 'index', name: 'No.', fieldName: 'index', isResizable: false },
{ key: 'edit', name: 'Edit', fieldName: 'edit', isResizable: false,
onRender: (item) => (
<Link onClick={() => { console.log('clicked', item); }}>Edit</Link>
),
},
]
}