Antdでreactフックコンポーネントを使用しています。テーブルの列を設定すると、レンダリング関数によってESLintエラーが発生します。
ESLint:コンポーネント定義にdisplayName(react/display-name)がありません
DisplayNameをオブジェクトに追加しようとしましたが、これは機能しません。
これはコードです:
const columns_payment_summary_table = [
{
title: SettlementConstants.LABEL_QUANTITY_SELECTED,
dataIndex: 'group',
key: 'group',
render: text => (
<span>{getCountForCountry(text)}</span>
),
}
]
誰か助けてもらえますか?
これが完全なコンポーネントコードです(関連するビットだけです)
import * as SettlementConstants from './constants'
import {connect} from 'react-redux'
import React, {useState, useEffect} from 'react'
import {Card, Table} from 'antd'
import PropTypes from 'prop-types'
const propTypes = {
settlements: PropTypes.object.isRequired,
}
function Settlements(props) {
const [selectedSettlementRows, setSelectedSettlementRows] = useState([])
useEffect(() => {
getSettlementDetails()
}, [])
function getSettlementDetails() {
props.dispatch({
type: SettlementConstants.GET_SETTLEMENT_PAYMENT_SUMMARIES,
params: {
'group_by': 'country_code',
'type': SettlementConstants.CLAIM_SETTLEMENT,
}
})
props.dispatch({
type: SettlementConstants.GET_SETTLEMENT_PAYMENTS,
params: {'type': SettlementConstants.CLAIM_SETTLEMENT, }
})
}
const columns_payment_summary_table = [
{
title: SettlementConstants.LABEL_QUANTITY_SELECTED,
dataIndex: 'group',
key: 'group',
render: text => (
<span>{getCountForCountry(text)}</span>
),
}
]
function getCountForCountry(country_code){
let selected_country = selectedSettlementRows.filter(function(row){
return row.group === country_code
})
if(selected_country && selected_country.length > 0){
return selected_country[0].ids.length
} else {
return 0
}
}
return (
<div>
<Card
title={SettlementConstants.LABEL_SETTLEMENT_SUMMARY}>
<Table
columns={columns_payment_summary_table}
bordered={true}
dataSource={props.settlements.settlement_payment_summaries}
loading={props.settlements.settlement_payment_summaries_pending && !props.settlements.settlement_payment_summaries}
rowKey={record => record.group}
/>
</Card>
</div>
)
}
Settlements.propTypes = propTypes
const mapStateToProps = (state) => {
return {settlements: state.settlementsReducer}
}
export default connect(
mapStateToProps,
)(Settlements)
ESLintは、名前を設定せずに新しいコンポーネントを定義していると見なします。
これは、ESLintが レンダープロップパターン を認識できないためです。これは、このレンダープロップをコンポーネントではなくオブジェクトに直接書き込んでいるためです。
render
プロップを<Column>
コンポーネントのjsx実装に直接配置するか、次のようにしてESLintのエラーをシャットダウンすることができます。
const columns_payment_summary_table = [
{
title: SettlementConstants.LABEL_QUANTITY_SELECTED,
dataIndex: 'group',
key: 'group',
// eslint-disable-next-line react/display-name
render: text => (
<span>{getCountForCountry(text)}</span>
),
}
]
お役に立てば幸いです;)
render
キーに通常の関数を使用すると、警告を無効にすることなく、ESLint警告も削除されます。
const columns_payment_summary_table = [
{
title: SettlementConstants.LABEL_QUANTITY_SELECTED,
dataIndex: 'group',
key: 'group',
render: function countForCountry(text) {
return <span>{getCountForCountry(text)}</span>
},
}
]