2.9.1
ãã©ãŠã¶
ããŒãã«ããã¿ãŒã«éèšçµ±èšã衚瀺ãããã®ã§ããã次ã®æ¹æ³ãè©ŠããŠããŸãã
footer
å°éå
·ã䜿çšããŠãããã«tr
ãštd
ãè¿œå ããŸã <Table
dataSource={dataSource}
footer={() => {
return (
<tr className='ant-table-row ant-table-row-level-0'>
<td>æ»è®¡</td>
<td>æ»è®¡</td>
<td>æ»è®¡</td>
</tr>
)
}}
/>
dataSource
propã«ããŒã¿ãè¿œå ããŸãdataSource.push({id: 'æ»è®¡', price: '3000'})
åçã¯åã®èšèã®äŸ¡å€ããããŸãïŒ
footer
å°éå
·ã䜿çšããŠããŸããã footer
å°éå
·ã¯ããŒãã«æ¬äœã«é©åããŠããŸããã
dataSource
propã«ããŒã¿ãè¿œå ããŸãããdataSourceã®é·ããpageSize
è¶
ããå Žåãè¿œå ã®ããŒã¿ã¯ç¡èŠãããŸãã
ããã«ã¡ã¯@TangMonk ããã°ãå ±åãããããæ©èœããªã¯ãšã¹ãããŠããããã§ãããã®æ©èœãå®è£ ããäºå®ã¯ãªãã®ã§ã¯ãªãããšæããŸãã ããŒãã«ã®ããã©ã«ãã®ããŒãžä»ããç¡å¹ã«ããŠãèªåã§ããŒãžä»ããå®è£ ã§ããŸãã
ãã¶ãã footer
ããŒãã«ã®æ¬äœã«åãããããã«äœãã§ããã§ããããïŒ
@yesmeck ããè¿äºããããšã
é¢é£ããåé¡ïŒïŒ3591ãïŒ1483ãïŒ4581
@ afc163 ãããããšãïŒ
ããªãã®ææ¡ã解決çã¯äœã§ããïŒ
ããããããŸãããã pageSize
ã䜿çšããŠããŒãã«ã®ããŒã¿ãµã€ãºãå³å¯ã«å¶éããããšã¯ã§ããªããšæããŸããããŒã¿ã¯ã¯ã©ã€ã¢ã³ãåŽã§ã¯ãªããµãŒããŒåŽã§åŠçããå¿
èŠããããããããŒãã«ã«ããŒã¿ãè¿œå ã§ããŸãã
ããã«ã¡ã¯ã
ãã®æ©èœã«é¢ããæŽæ°ã¯ãããŸããïŒ ãŸãã¯ãããè¡ãå¥ã®æ¹æ³ïŒ
@yesmeckæãç°¡åãªè§£æ±ºçã¯ãããŒãã«ã®å€åŽã«è¿œå ã®<div>
ãè¿œå ãã代ããã«ãããã¿ãŒã«ããŒãã«ã®å
åŽã«å®éã®<tfoot>
ã¬ã³ããªã³ã°ãããããšã§ãã
人ã
ã¯ãããŒãã«ã¬ã€ã¢ãŠãã§åãæããããšããçç±ã ãã§ãäœåãªè¡ãdataSource
è©°ã蟌ãããšããŠããŸãã
ã¯ãããã§ã«footer
å°éå
·ãããã <tfoot/>
é©åãªååãèŠã€ããããšãã§ããŸããã
æ°ããtfoot
ãããããè¿œå ããã®ã§ã¯ãªããçŸåšã®footer
ãããããåå®è£
ããŠãããŒãã«å
ã«<tfoot />
ã¬ã³ããªã³ã°ããããšãææ¡ããŠããŸãã ãããäœããå£ããšã¯æããªãã§ãã ããã
@yesmeckãã®æ©èœã¯é »ç¹ã«ãªã¯ãšã¹ããããŠããããã§ãã èŠçŽè¡ãè¿œå ããã®ã«ãèŠåŽããŠããŸãã åé¿çã¯ãããŸãããããããŒãªdomæäœãå«ãŸããããããããªãœãªã¥ãŒã·ã§ã³ã衚瀺ãããŸãã
ããŒã ã®èª°ãããã§ã«ãããäžè©±ããŠããŸããïŒ å€åãªããªãç§ã¯ããã調ã¹ãããšãã§ããŸãã
PRããè©Šãããã ããŸãã
@yesmeckã©ããïŒ https ïŒ
å¹æã«ã€ããŠã¯ãexample / renderFooterInTableãåç
§ããŠãã ãã
tfoot
APIã«ã€ããŠãã°ããèããåŸããããcolumn
ããããã£ã«è¿œå ããããšæããŸãã
const columns = [{
title: 'Age',
dataIndex: 'age',
key: 'age',
footer: (data) => {
return <div>Summary: {data.reduce((sum, record) => sum + record.age, 0)}</div>
},
}, {
title: 'Name',
dataIndex: 'name',
key: 'name',
}, {
title: 'Address',
dataIndex: 'address',
key: 'address',
}];
ã¬ã³ããªã³ã°
çŸåšã®Table[footer]
ãšã®éããæ確ã«ããããšã¯ããæ確ã§ãã
è¯ãã¢ã€ãã¢ã ãããæ°ããAPIãè©°ã蟌ãã®ã«é©ããå Žæã«ãªãããšã«åæããŸãã
@hackapeæ°ããPRãææ¡ããŠ
確å®ãªããš
https://codesandbox.io/s/m45r6o4nj8
éæããŸããããã¹ã¯ããŒã«ããŒã®ãªã³ã±ãŒãžã«åé¡ããããèŠãæ¹ã䟿å©ã§ã
@yesmeckä»ã®react-component / tableïŒ195ã®ç¶æ ã¯ã©ãã§ããããã£ãŒãããã¯ã¯ãããŸããïŒ
å䜵ããã®ãèŠãð @ yesmeck
ããããè¿œå ã®æ©èœãªã¯ãšã¹ãããããŸããã ãããããããã¿ãŒããããŒãã«ã®äžéšãããŒãã«ããããŒã®ããäžã«è¡šç€ºã§ããããã«ããããšãææ¡ããããšæããŸãã
äŸïŒ
åžžã«è°è«ãããŠããå®éã«èŠæ±ãããæ©èœã¯ãçµ±èšæ
å ±ã衚瀺ããããã«äœåãªè¡ãè©°ã蟌ãããšãæå³ããŸããã€ãŸãã dataSource
ã®ã³ã³ãã³ããæ¹ããããããšãªãããããã¿ãŒãã§ã¯ãªããèŠçŽè¡ãã«ãªããŸããäœçœ®æèŠã
@hackapeåã®ã°ã«ãŒãåã䜿çšã§ããŸã//codesandbox.io/s/pmorq2x2lqãåç §ããŠãã ããã
ã¯ãããããåã«ããžã·ã§ãã³ã°ã®ç®çã®ããã§ãããªãã°ãããã¯å®è¡å¯èœãªæ段ã«ãªãã§ãããã ããããããžãã¹ããžãã¯ã®æå³ã§ã¯ãææ¡ãããAPIãä»ããŠãŠãŒã¶ãŒã«å®è¡ãããæ¹ãã¯ããã«åªããŠããŸãã
column.footer
APIã®ååãcolumn.summary
å€æŽã§ãããšèããŠãã ããã
const columns = [{
title: 'Age',
dataIndex: 'age',
key: 'age',
summary: {
render: (data) => {
return <div>Summary: {data.reduce((sum, record) => sum + record.age, 0)}</div>
},
position: 'bottom', // default to 'bottom', could be 'top'
}
}]
@yesmeckhttps ïŒ //github.com/ant-design/ant-design/issues/6896ãæ€èšããŠãã ãã
pinnedTopData
ãšpinnedBottomData
ãšããååã®2ã€ã®æ°ããããã玹ä»ããããšãææ¡ããŸãã
const columns = [
{ title: 'Price', dataIndex: 'price' },
{ name: 'Name', dataIndex: 'name' },
];
const data = [
{ price: 3, Name: 'Foo' },
{ price: 5, Name: 'Bar' },
];
const pinnedData = [
{ price: <span style={{ fontWeight: 'bold' }}>Total: 8</span> }
];
<Table
columns={columns}
dataSource={data}
pinnedTopData={pinnedData}
pinnedBottomData={pinnedData}
/>
ã¬ã³ããªã³ã°ïŒ
| äŸ¡æ Œ| åå|
| ---------- | ------ |
| åèšïŒ8 | |
| 3 | Foo |
| 5 | ããŒ|
| åèšïŒ8 | |
ïŒ6896ãšãã®åé¡ãåãAPIã§è§£æ±ºããããšããå§ãããŸãã
æ°ããé²æ©ã¯ãããŸããïŒ
@Nokecyã¯ã圌ã®è§£æ±ºçã2ã€ã®æ¹æ³ã§èŠãŠããŸãã圌ã¯äžæçã«å±æ§ã«è¿œå ããŠããŸããã圌ã®åããŒãã«ã«ã¯ãã®å±æ§ããããšæããŸããåæã¯ãããŒãžã§ã³çªå·ãææ°ã«ã¢ããã°ã¬ãŒããããŠããããšã§ãããantdpackage.jsonãå€æŽããå¿
èŠããããŸãã 2ã€ã®æ¹æ³ã
1.åãå°ãªããã¹ã¯ããŒã«ããŒã衚瀺ãããªãå Žåã¯ãç°¡åã«è§£æ±ºã§ããŸããäžèšã®äŸã瀺ããŸãã
2.è€æ°ã®ã¿ã€ãã«ããŒã䜿çšããŠè¡šç€ºã§ããŸãããããã»ã©çŸããã¯ãããŸããã
ãã®æ©èœãæ¹åããããšã楜ãã¿ã«ããŠããã泚æãæã£ãŠããŸãããantdã¯2ã§ããæŽæ°ããŠãã2ãããŒãžã§ã³ã«ãã®å±æ§ããã
ãã®åé¡ã®æŽæ°ã¯ãããŸããïŒ
å
¬åŒAPIãåºè·ããåã«ãä»ã®ãšããtable.props.components.body.wrapper
ã«ã¹ã¿ã ã³ã³ããŒãã³ããæäŸããåãåã£ãprops.children
ãæ¹ããããããšããå§ãããŸãã
https://codesandbox.io/s/xpvwpx0npw
domèŠçŽ ãçŽæ¥æäœããŠåèšãã«ãã»ã«åããŸããããã®æ¹æ³ã§ããã¿ãŒãããããè¿œå ã§ããŸãããå
¬åŒã§ã¯domèŠçŽ ãçŽæ¥æäœããããšã¯ãå§ãããŠããŸãããç·æ¥ã«å¿
èŠãªå Žåã¯ãã¡ããåç
§ããŠãã ããã
@ LDD123ã¹ã¯ããŒã«xã¯ãäŸã®ããã¿ãŒã«ã®ã¿ãããŸãã æ¬äœãããã¿ãŒã§ã¹ã¯ããŒã«ããå¿ èŠããããŸã
@jagratiTomarããã¿ãŒãã¹ã¯ããŒã«ããŠãããšãã«ããã£ãã¹ã¯ããŒã«ããŸããããã£ã®scroll-xãããã¿ãŒã®scroll-xã«ãã€ã³ãããŸãã
@ LDD123ã¯ãæ¬äœã«ãã¹ã¯ããŒã«yãããå Žåã®äŸãå ±æã§ããŸãããã®å Žåãæ¬äœã®ã¿ãã¹ã¯ããŒã«ããããã¿ãŒã¯è¡šç€ºãããªãããã§ãã
@jagratiTomarä»ãç§ã¯ã¹ã¯ããŒã«ãé ããŸãã-xã¯ã¹ã¯ããŒã«ããŸãããããã¯å€§äžå€«ã§ã
@ LDD123ã ãããã¹ã¯ããŒã«ããããšã-yãã®äŸã¯æ£ããæ©èœãããšèšã£ãŠããŸããïŒ
ãã
ããã«ã¡ã¯@ yesmeck @ afc163 ã
ç§ãã¡ã®ãã¶ã€ããŒã¯ãUXã®ç®çã§ãããã¿ãŒïŒéèšå€ãæã£ãŠããŸãïŒãæ¬äœã®äžéšãšããããŒã®ããäžã«é 眮ããŸãã ããããŒãšããã¿ãŒã®äžŠã¹æ¿ãã®ç¢å°ã«ã¯ãéèšå€ã®ã¿ããããŸãã ColumnGroupã䜿çšãããšã䞊ã¹æ¿ãçšã®ç¢å°ãäžéšã«è¿œå ãããŸãã ã¹ã¿ã€ãªã³ã°ã®èŠ³ç¹ããã¯ãããã¿ãŒã³ã³ããã®è²ãç°ãªããäžéšã®ã»ã«ã«ã®ã¿ã»ãã¬ãŒã¿ããããããããã¿ãŒã®ã¹ã¿ã€ã«ãèšå®ããŠäžéšã«èšå®ããæ¹ãã¯ããã«ç°¡åã§ãã
ç§ã¯ãã ããã§ãããïŒ
.my-table tfoot > tr {
background-color: gray;
}
ããŒãã«ã³ã³ããŒãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
<Table appendColumnFooterTop={true}>
<Column
footer={(data) => <div>Summary: {data.reduce((sum, record) => sum + record.age, 0)}</div>}
/>
</Table>
èšèšïŒ
ã»ã«å ã®æŽåãããŠããªãããã¹ãã¯ã以åã«äœæããããŒãžããã®ãã®ã§ãããã³ãŒãã£ã³ã°ããŠããæ°ããããŒãžã«æŽåããå¿ èŠããããŸãã
2ã3é±é以å ã«ãªãªãŒã¹ã§ããããšãããã£ãŠããã°ããµããŒããæäŸã§ããŸãïŒåããã¿ãŒãšãã®é 眮ïŒã ããã§ãªããã°ãç§ã¯ä»ã®è§£æ±ºçãèŠã€ããããšãäœåãªããããŸãã
ãããïŒ6896ãã³ã©ã ããã¿ãŒã«é¢ãããã®ãã©ããç解ã§ããªãã£ãã®ã§ãããã«æžããŸããã
ããããšãã
@kaanozcan 3æã«åãã¢ã€ãã¢ïŒãããåç §ïŒãå®è£ ããPRãæåºããŸããããã³ã¢ããŒã ããããããŒãžãããã®åŸå ã«æ»ããŸããã 圌ãã¯åé¡ã«ã©ã®ããã«åãçµãã¹ããã«ã€ããŠä»ã®èããæã£ãŠããããã§ãã ç¶æ³ãèãããšããä»ã®è§£æ±ºçãèŠã€ããããšããéããã©ãããšããå§ãããŸãã
@kaanozcanããã¯ãã«ã¹ã¿ã ã³ã³ããŒãã³ãã«ãã£ãŠç®æšãéæããäŸã§ãhttps://codesandbox.io/s/xjpkx9rzzw
@yesmeckããã¯å®ç§ã«æ©èœããŸãã ããããšãã
å ã®èŠæ±ã«ããçµäºã¯ãã«ã¹ã¿ã ã³ã³ããŒãã³ãã«ãã£ãŠå®çŸã§ããŸãã
@yesmeckãã®
https://codesandbox.io/s/xjpkx9rzzw
ãã®äŸã«ã¯å®çšçãªæå³ã¯ãããŸãããããŒã¿ãå€æŽãããå ŽåãæåŸã®åèšã¯ææ°ã®ããŒã¿ã䜿çšããŸãããããã¯æåŸã®æŽæ°ã®çµæã§ããããŒãã£ããŒã¿ãããã¯ãã§ãã
@yesmeckããŒã¿ãå€æŽã§ããªãããã
ãã®å€æŽãªã©ã®const data = [
{
key: "1",
name: "John Brown",
age: 30,
address: "New York No. 1 Lake Park",
},
{
key: "2",
name: "Jim Green",
age: 20,
address: "London No. 1 Lake Park",
},
{
key: "3",
name: "Joe Black",
age: Math.random() * 20,
address: "Sidney No. 1 Lake Park",
},
];
...å®éã«ã¯æçµçãªåèšã¯æ£ãããããŸããã
@yesmeck https://codesandbox.io/s/xjpkx9rzzwãã®ãã¢ã«ã¯åé¡ããããfixedã®å·ŠåŽã«èšå®ãããšãã¹ã¿ã€ã«ãæ··ä¹±ããŠããããšãããããŸãã
ã³ã³ããŒãã³ãã©ãããŒã䜿çšããŠãããè¡ãããšãã§ããŸããããããã¯ã¡ãã£ãšåä»ã§ãã ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸã
export default class extends PureComponent {
constructor(props) {
super(props);
this.state = {
localData: props.data,
};
this.tableRef = React.createRef();
}
handleTableUpdate = () => {
this.setState({ localData: this.tableRef.current.getLocalData() });
}
render() {
return (
<Table
ref={this.tableRef}
columns={this.props.columns}
dataSource={this.props.data}
onChange={this.handleTableUpdate}
components={{
body: {
wrapper: (props) => (
<BodyWithSummary
columns={this.props.columns}
data={this.state.localData}
{...props}
/>
),
},
}}
/>
);
}
}
function BodyWithSummary(props) {
const { data, columns, ...otherProps } = props;
return (
<tbody {...otherProps}>
<React.Fragment>
{data && data.length > 0 && (
<tr>
{props.columns.map((col) => renderColumn(col, data))}
</tr>
)}
{props.children}
</React.Fragment>
</tbody>
);
}
åä»ãªã®ã¯ããã£ã«ã¿ãªã³ã°ãããè¡ã§éèšããŒã¿ãèšç®ããå Žåã¯ã getLocalData
ãåŒã³åºãå¿
èŠãããããšã§ãã
ããã£ã©ãããŒãããŒãã«refãå°éå
·ãšããŠåãåãããã¬ã³ããªã³ã°ãããããŒã¿ã«ã¢ã¯ã»ã¹ããç°¡åãªæ¹æ³ãããå Žåã¯ãã¯ããã«äŸ¿å©ã§ãïŒprops.childrenã¯åå¿ããŒãã®ãªã¹ãã§ãããéèšã®èšç®ã«ã¯ããŸã圹ç«ã¡ãŸããïŒ
footer
propã䜿çšã§ããŸãããè¿œå ã®divã®ä»£ããã«ããŒãã«ã§ã¬ã³ããªã³ã°ã§ããŸããïŒ
äžæçã«æ¬¡ã®ããã«åŠçãããŸãã
.ant-table-footer {
padding: 0;
}
footer={(currentPageData)=>{
return (
<Row style={{marginRight:17}}>
<Col span={4} className="brd">
<Card bordered={false} className="bgfb" bodyStyle={{padding:'10px 15px'}}>å计</Card>
</Col>
<Col span={4} className="brd">
<Card bordered={false} className="bgfb" bodyStyle={{padding:'10px 15px'}}>123456789</Card>
</Col>
<Col span={4} className="brd">
<Card bordered={false} className="bgfb" bodyStyle={{padding:'10px 15px'}}>123456789</Card>
</Col>
<Col span={4} className="brd">
<Card bordered={false} className="bgfb" bodyStyle={{padding:'10px 15px'}}>123456789</Card>
</Col>
<Col span={4} className="brd">
<Card bordered={false} className="bgfb" bodyStyle={{padding:'10px 15px'}}>123456789</Card>
</Col>
<Col span={4}>
<Card bordered={false} className="bgfb" bodyStyle={{padding:'10px 15px'}}>123456789</Card>
</Col>
</Row>
);
}}
å®ç§ã§ã¯ãããŸããã
ããã«åºãŠããæ±ã®è¶³å ã楜ãã¿ã«ããŠããŸãOïŒâ©_â©ïŒO
@ybningåºå®åã«åé¡ããããŸããïŒãããã®åºå®åã®å€ãã«ã¯åé¡ããããŸãã ã
@yesmeckããªãã®äŸã¯ãå
éšããŒãã«ã®ã«ãŠã³ããå£ããŸãïŒ https ïŒ //codesandbox.io/s/rrpo02qwkq
2ããŒãžã«ç§»åããŠãã1ããŒãžã«æ»ããåããã²ãŒã·ã§ã³ã®ããŒã¿ãè€è£œããŸãã
ãã®åé¡ã®æŽæ°ã¯ãããŸããïŒ
@linrfãããã誰ãããã®åé¡ã解決ã§ããããšãé¡ã£ãŠããŸã
ãã®ãããªã
https://codepen.io/chaegumi/pen/OaqxVd
éèšçµ±èšãåŠçããããã«total
å°éå
·ãè¿œå ã§ããŸããïŒ
total
ã¯footer
ãšã¯ç°ãªããŸãã
åããŒã¿ãåŠçããé¢æ°ã®ã¿ãåãå
¥ããŸããããã©ã«ãã¯reduce
ã€ãã«åèšãåã«å
¥ããŸãã
antdã®ããŒãã«ããã¿ãŒã³ã³ãã³ãã®ã¬ã³ããªã³ã°ã¯ãç¹ã«ããŒãã«èªäœã«åºå®åãããå Žåãå®éã«ã¯äœ¿ãããããã®ã§ã¯ãããŸããã
å ã®ããŒãã«ãã¬ã³ããªã³ã°ããããã®ããŒãã«ãšãäžéšã®ããã¿ãŒèŠçŽ ãã¬ã³ããªã³ã°ããããã®ããŒãã«ã®2ã€ã®ããŒãã«ã䜿çšããŠããããå®çŸããæ¹æ³ãå€æŽã§ããŸããã¹ã¿ã€ã«ã«ãã¬ããžã䜿çšããŠãããŒãã«ããã¿ãŒã®Theadãšå ã®ããŒãã«ã¹ã¯ããŒã«é åã®ã¹ã¯ããŒã«ããŒãé衚瀺ã«ããŸããæåŸã«ãJSã³ãŒããè¿œå ããŠã2ã€ã®ããŒãã«ã®æ°Žå¹³ã¹ã¯ããŒã«äœçœ®ãæããŸããããã¯ãã»ãŒåãã§ãã
ã³ã³ããŒãã³ãïŒ
import React, { PureComponent } from 'react';
import { Table } from 'antd';
import styles from './index.less';
export default class ChartTable extends PureComponent {
constructor(props) {
super(props);
this.refBox = React.createRef();
}
componentDidMount() {
const tableList = Array.from(this.refBox.current.querySelectorAll('.ant-table-body'));
this.tableList = tableList;
tableList.forEach((table) => {
table.addEventListener('scroll', this.handleTableScroll);
});
}
componentWillUnmount() {
this.tableList.forEach((table) => {
table.removeEventListener('scroll', this.handleTableScroll);
});
}
handleTableScroll = (e) => {
const current = e.currentTarget;
this.tableList.forEach((table) => {
if (table !== current && table.scrollLeft !== current.scrollLeft) {
table.scrollLeft = current.scrollLeft;
}
});
}
renderFooterTable = () => {
const { columns, dataSource } = this.props;
const dataList = [{
department: 'å计',
}];
return (
<Table
className={styles.footerTable}
pagination={false}
scroll={{ x: 'max-content' }}
size="small"
columns={columns}
dataSource={dataList}
/>
);
}
render() {
return (
<div ref={this.refBox}>
<Table
className={styles.mainTable}
pagination={false}
scroll={{ x: 'max-content', y: 350 }}
size="small"
columns={this.props.columns}
dataSource={this.props.dataSource}
/>
{this.renderFooterTable()}
</div>
);
}
}
ã¹ã¿ã€ã«ã«ãã¬ããžãã¡ã€ã«ïŒ
mainTable {
:global {
.ant-table-body::-webkit-scrollbar {
display: none;
}
}
}
.footerTable {
border-top: 1px solid #e8e8e8;
:global {
thead {
display: none;
}
}
}
+1ããã¿ãŒã«åã®éèšã衚瀺ããæ¹æ³ã欲ããã
ããã¯ãcomponentspropã䜿çšããŠå®è£ ã§ããŸãã
const __Table = (totalsRow = initTotals(), key='tableKey') => ({
className,
style,
children
}) => (
<table className={className} style={style} key={key}>
{children}
<tfoot>
<tr>
// add tfoot td here
</tr>
</tfoot>
</table>
);
const TableWithTFoot = ({allData, columns}) =>
<Table
dataSource={allData.data}
columns={columns}
pagination={false}
components={{ table: __Table(allData.totals) }}
/>
@rororofffã¯ãã®åé¡ã«$ 5.00ã®è³éãæäŸããŸããã
@piuccioããªãã®èãã«ãããšãç§ã¯ãããã¿ã€ãã¹ã¯ãªããã§æžããŠããŸãã
https://github.com/Arweil/antd-ext/blob/master/src/TableExt/TableExt.tsx
https://github.com/ant-design/ant-design/issues/5710#issuecomment -450855438
this.refBox = React.createRef();
ãã®ããŒãžã§ã³ã®ããã±ãŒãžã䜿çšããŠããŸããããã®ã³ãŒãã®å®è¡ã«å€±æããŸããã
"antd"ïŒ "2.13.14"ã "react"ïŒ "15.4.0"ã "react-dom"ïŒ "15.4.0"
ãšã©ãŒã¡ãã»ãŒãžUncaught TypeError: _react2.default.createRef is not a function
at new EstimationReport (psReport.js?18c1:47)
at eval (ReactCompositeComponent.js?063f:295)
at measureLifeCyclePerf (ReactCompositeComponent.js?063f:75)
at
@carvendy react
ã€ã³ããŒããããšãã®ã¢ãžã¥ãŒã«è§£æ±ºèšå®ã§ããå¯èœæ§ããããŸãã å€æŽããŠã¿ãŠãã ãã
import from 'react';
ããã«ïŒ
import * as react from 'react'
ã³ã³ããŒãã³ããäœããŸããã
åã¢ãã«ã䜿çšããŠããã¿ãŒãã¬ã³ããªã³ã°ããŸã
ãã ããã¹ã¯ããŒã«ããŒã¯çŸåšãµããŒããããŠããŸããã
import React from 'react';
class TableFooter extends React.Component {
render() {
const { dataSource, columns } = this.props;
return (
<table className="ant-table">
<colgroup>
{columns.map((colModel, index) => {
return <col style={{
width: colModel.width,
minWidth: colModel.width
}} key={index} />
})}
</colgroup>
<tfoot >
<tr >
{columns.map((colum, idxCol) => {
return <td style={{ padding: "0px 8px" }} className={colum.className} key={idxCol}>
<strong>
{colum.footerContent ? colum.footerContent : (colum.footerSum ? dataSource.reduce((sum, record) => sum + parseFloat(record[colum.key]), 0) : "")}
</strong>
</td>
})}
</tr>
</tfoot>
</table>
)
}
}
export default TableFooter;
ããŒãžã³ãŒã«
...
render() {
const columns = [
{
key: 'productName'
footerContent: 'SUM:',
},
{
key: 'quantity',
footerSum: true,
}
}
];
return (
<Table
columns={columns}
dataSource={dataSource}
footer={()=> {
return (
<TableFooter dataSource={dataSource} columns={columns} />
)
}
}
/>
)
....
var data = this.getLocalDataïŒïŒ;
var current;
var pageSize;
var state = this.state; //ããŒãžã³ã°ããªãå Žåãããã©ã«ãã§ãã¹ãŠã衚瀺ãããŸã
if (!this.hasPagination()) {
pageSize = Number.MAX_VALUE;
current = 1;
} else {
pageSize = state.pagination.pageSize;
current = this.getMaxCurrent(state.pagination.total || data.length);
} // å页
// ---
// åœæ°æ®éå°äºçäºæ¯é¡µæ°éæ¶ïŒçŽæ¥è®Ÿçœ®æ°æ®
// åŠåè¿è¡è¯»åå页æ°æ®
if (data.length > pageSize || pageSize === Number.MAX_VALUE) {
data = data.filter(function (_, i) {
return i >= (current - 1) * pageSize && i < current * pageSize;
});
}
return data;
}
ããã¯ããŒãã«åŠçããŒã¿ã®ãœãŒã¹ã³ãŒãã§ããããã«é¢æ°ãè¿œå ããŠããªã¹ãå€ã®åèšãèšç®ããåºåæã«ããŒã¿ã®ç·æ°ãè¿œå ããè¿œå ããã°ããã®ããŒã¿ãããŒãžãšããŒãžãµã€ãº@sorryccããæžç®ã§ããŸãã
2幎åŸããã®åé¡ã¯ãŸã ååšããŸãã
2幎åŸããã®åé¡ã¯ãŸã ååšããŠããŸãã
ç§ã¯ããšããšãåãæžãæããŠéããŒãžããŒãã«ã«ããŒã¿ãè¿œå ããã¬ã³ããªã³ã°ãå€æŽããæ¹æ³ã䜿çšããŸããã
ãã ããããŒãžããŒã·ã§ã³ã®å Žåãè€æ°ã®ããŒã¿ãã¢ããããŒãããããšãããŒã¿ã¯åŒ·å¶çµäºãããŸãhttps://github.com/ant-design/ant-design/blob/fee5e291632cce131611dd1a9e2ab89e02ee43a3/components/table/Table.tsx#L407
PRãããã®ã§ãããAPIãã¶ã€ã³ãäžåžã®èŠä»¶ãæºãããŠããªãã®ã§ã¯ãªãããšæããŸã@ afc163 ...
2幎åŸããã®åé¡ã¯ãŸã ååšããŠããŸãã
éäžã®æ°ããããŒãã«ãæ°ããããŒãã«ã楜ãã¿ã«ããŠããŸãã
https://github.com/ant-design/ant-design/issues/16911#issuecomment -523423460
@ alexchen1875ããã«é¢é£ããããšã¯äœãèšåãããŠããŸããã
@ alexchen1875ããã«é¢é£ããããšã¯äœãèšåãããŠããŸããã
è¡šã®ã»ã¯ã·ã§ã³ã®æ瀺ã泚ææ·±ãèªãã§ãã ããã
@ alexchen1875çŽ æŽãããïŒ
PRãéä¿¡ããã¹ãããããµããŒãããããã«ãããŒã¿ãããŒã¿ãããªãã³ã°ããªãããã«ãããã®å°éå ·ãäžæçã«è¿œå ãããhttps://github.com/ant-design/ant-design/blob/61e319b66826530a1882c20a41862a15d57b120a/components/table/Table.tsx ïŒL408ã®ãã£ã«ã¿ãŒããžãã¯ã«ãããããŒãžããŒã·ã§ã³ã®å Žåã«ãhttps://github.com/ant-design/ant-design/issues/5710#issuecomment-524164125ãå©çšå¯èœã«ãªããŸããããŒã ãåãå ¥ãããã©ããã¯ããããŸãã...
ãã®ãã¢ãå€æŽ
åºå®åãããããŒã°ã«ãŒãåãã»ã«ã®ããŒãžãšã¹ã¯ããŒã«ã®ãµããŒããè¿œå ãããŸããã
ç§ã¯\ã䜿çšããŸãã
ðæ°ãããã¢ã¢ãã¬ã¹
䜿çšæ³ ïŒ
const calcRow = [
{
colspan: 2,
render: () => 'total'
},
{
render: sum => sum('age')
},
{
render: sum => sum('score')
}
]
antd v4ã¯ããŒãã«summary
ãµããŒãããŠããŸããïŒ https ïŒ
https://ant.design/components/table/#components -table-demo-summary
antd v4ã¯ããŒãã«
summary
ãµããŒãããŠããŸããïŒïŒ21656https://ant.design/components/table/#components -table-demo-summary
antd4ã¯summaryããµããŒãããŠããŸããããã®summaryãç¹°ãè¿ãå¿ èŠããããšæããŠããŸããçŸåšã®äœ¿çšæ¹æ³ã¯ç¡æã§ãããåæã«ãã³ãŒããç ©éã§ãããantd4ã®æ¬æ¥ã®æå³ã«åããåçŽã«ãªããšãã圱é¿ããããŸãã
äžè¬çãªåçŽãªã·ããªãªã¯ãçŸåšã®ããŒãžã®ããŒã¿ãèŠçŽããããšã§ãããããããããšã¯ã¹ããªãšã³ã¹ã¯ãèŠçŽãçŽæ¥æ§æããããšã§ããã³ãŒããæŽé ãããŠçµ±äžãããããã«ãcloumnã§
æãåèã«ãªãã³ã¡ã³ã
ãã¶ãã
footer
ããŒãã«ã®æ¬äœã«åãããããã«äœãã§ããã§ããããïŒ