semantic-ui-react 列出 onClick 声明
semantic-ui-react List onClick declaration
我正在尝试使用 semantic-ui-react 动态创建文档列表。单击列表项时,我想取回文档标题。根据文档:
https://react.semantic-ui.com/elements/list
出于这个原因有一个 onItemClick
道具,但是当我使用它时,我在渲染时收到警告:
警告:道具类型失败:List
中的道具 onItemClick
与道具:children
冲突。不能一起定义,二选一
此外,单击列表项不会执行任何操作(atm 我只想将文档标题记录到控制台)。这是代码:
handleListItemClick(event, data) {
console.log("list item clicked: " + data.value);
}
buildResultsContainer() {
return this.props.listOfResults.map((document,index) =>
{
return (
<List.Item
as='a'
key={index}>
<Icon name='file' />
<List.Content>
<List.Header>{document.properties.title}</List.Header>
<List.Description>
{document.properties.description}
</List.Description>
</List.Content>
</List.Item>
);
}
);
}
render() {
return (
<div>
<List onItemClick={this.handleListItemClick}>
{this.buildResultsContainer()}
</List>
</div>
)
}
请问如何正确使用List组件的onItemClick属性?
不太重要,你有什么技巧可以重构列表渲染吗?只是想让 render 函数简洁明了,但是这个函数调用看起来有点矫枉过正....
非常感谢!
我认为使用 onItemClick
的意图可能是您将在 List
上使用 items
道具,从那时起您将不会有任何 children
例如
render() {
const items = this.props.listOfResults.map(document => {
return {
icon: 'file',
content: document.properties.title,
description: document.properties.description,
onClick: e => console.log(document.title)
}
});
return <List items={items} />
}
如果您的 listOfResults
道具采用上述格式,您甚至不需要这样做 map
并且您的 render
功能会非常紧凑:
render() {
return <List items={this.props.listOfResults} />;
}
或者,List.Item
接受一个 onClick
属性,您可以在 buildResultsContainer()
函数中定义该属性。由于每个 onClick
函数基于当前 document
对象都是唯一的,因此您需要使用匿名函数来调用您的 handleClick
函数,如下所示:
<List.Item
onClick={() => this.handleClick(document.title)}
...etc
/>
您将拥有:
handleClick = docTitle => {
console.log(docTitle);
};
如果您想要的东西可以从 event.target
获得,您可以将 handleClick
的引用传递给 onClick
,即
handleClick = event => {
console.log(e.target.innerText);
};
<List.Item
onClick={this.handleClick}
/>
我正在尝试使用 semantic-ui-react 动态创建文档列表。单击列表项时,我想取回文档标题。根据文档: https://react.semantic-ui.com/elements/list
出于这个原因有一个 onItemClick
道具,但是当我使用它时,我在渲染时收到警告:
警告:道具类型失败:List
中的道具 onItemClick
与道具:children
冲突。不能一起定义,二选一
此外,单击列表项不会执行任何操作(atm 我只想将文档标题记录到控制台)。这是代码:
handleListItemClick(event, data) {
console.log("list item clicked: " + data.value);
}
buildResultsContainer() {
return this.props.listOfResults.map((document,index) =>
{
return (
<List.Item
as='a'
key={index}>
<Icon name='file' />
<List.Content>
<List.Header>{document.properties.title}</List.Header>
<List.Description>
{document.properties.description}
</List.Description>
</List.Content>
</List.Item>
);
}
);
}
render() {
return (
<div>
<List onItemClick={this.handleListItemClick}>
{this.buildResultsContainer()}
</List>
</div>
)
}
请问如何正确使用List组件的onItemClick属性?
不太重要,你有什么技巧可以重构列表渲染吗?只是想让 render 函数简洁明了,但是这个函数调用看起来有点矫枉过正....
非常感谢!
我认为使用 onItemClick
的意图可能是您将在 List
上使用 items
道具,从那时起您将不会有任何 children
例如
render() {
const items = this.props.listOfResults.map(document => {
return {
icon: 'file',
content: document.properties.title,
description: document.properties.description,
onClick: e => console.log(document.title)
}
});
return <List items={items} />
}
如果您的 listOfResults
道具采用上述格式,您甚至不需要这样做 map
并且您的 render
功能会非常紧凑:
render() {
return <List items={this.props.listOfResults} />;
}
或者,List.Item
接受一个 onClick
属性,您可以在 buildResultsContainer()
函数中定义该属性。由于每个 onClick
函数基于当前 document
对象都是唯一的,因此您需要使用匿名函数来调用您的 handleClick
函数,如下所示:
<List.Item
onClick={() => this.handleClick(document.title)}
...etc
/>
您将拥有:
handleClick = docTitle => {
console.log(docTitle);
};
如果您想要的东西可以从 event.target
获得,您可以将 handleClick
的引用传递给 onClick
,即
handleClick = event => {
console.log(e.target.innerText);
};
<List.Item
onClick={this.handleClick}
/>