我在将一些 JSON 数据渲染到 React 表(来自库 react-table)时遇到了一些问题。这是我正在使用的 json 示例:
const translateditems = [
{
id: 1,
colonne1: [
{
language: 'en',
content: 'Column n°1'
},
{
language: 'fr',
content: 'Colonne n°1'
}
],
colonne2: [
{
language: 'en',
content: 'Column n°2'
},
{
language: 'fr',
content: 'Colonne n°2'
}
],
dateCreated: '2018 - 02 - 01 30: 00: 00.000'
}
]
对于选择的语言,如果需要,我只需要显示每列翻译文本的一个对象。(在本例中,日期不需要翻译成任何特定语言)
这是我渲染我的 react-table 的方式:
constructor () {
super()
this.state = {
data: translateditems
}
}
render () {
const { data } = this.state
const headers = []
// I use all the name fields in the first json object as headers
for (var key in Object.keys(data[0])) {
headers.push(Object({
'content': Object.keys(data[0])[key]
}))
}
return (
<div>
<ReactTable
data={data}
columns={headers.map(header => {
return ({
Header: header.content,
accessor: header.content
})
})
}
defaultPageSize={10}
className='-striped -highlight'
/>
<br />
</div>
)
}
你对如何做到这一点有任何线索吗?
更新
这是我为解决问题所做的工作:
return (
<div>
<ReactTable
data={data}
columns={headers.map(header => {
return ({
Header: header.content,
accessor: header.content,
// I added a function to apply on my Cell
Cell: row => (
<div>{this.renderTranslatedItem(data, header.content, row.index)}</div>
)
})
})
}
defaultPageSize={10}
className='-striped -highlight'
/>
<br />
</div>
)
这是我制作的功能(假设 lang 是我想要的语言):
renderTranslatedItem (data, column, rowIndex) {
// I check if the value is an array -> if it's not, then I return null
if (Object.prototype.toString.call(data[rowIndex][column]) !== '[object Array]') {
return null;
}
for (var i in data[rowIndex][column]) {
if (data[rowIndex][column][i].language === lang) {
return data[rowIndex][column][i].content
}
}
}