我正在尝试在React中实现一个描述列表,如下所示。我想要添加的一个要求是允许它是递归的。以下是如何使用它的示例。
<DescriptionList>
<DescriptionListItem key="1" term="First Name" description="Ryan" />
<DescriptionListItem key="2" term="Last Name" description="Me" />
<DescriptionListItem key="3" term="Email" description="emample@mail.com" />
<DescriptionList>
<DescriptionListItem key="1" term="term1" description="value 1" />
<DescriptionListItem key="2" term="term2" description="value 2" />
<DescriptionListItem key="3" term="term3" description="value 3" />
</DescriptionList>
</DescriptionList>
我想使用类似html definition list
的内容import React, { Component, PropTypes } from 'react';
import createFragment from 'react-addons-create-fragment';
class DescriptionList extends Component {
render() {
console.log(this.props.children);
return (
<dl className="row">
{this.props.children.map(child => createDescriptionListItemFragment(child))}
</dl>
);
}
}
function createDescriptionListItemFragment({props}) {
let fragment = {};
fragment.term = <dt>{props.term}</dt>;
fragment.description = <dd>{props.description}</dd>;
fragment = createFragment(fragment);
return fragment;
}
DescriptionList.propTypes = {
children: PropTypes.array.isRequired
};
export default DescriptionList;
以上是第一轮实施。我希望将DescriptionListItem
提取到它自己的组件中并处理那里的DescriptionListItem
逻辑。因为createFragment
返回一个ReactElements数组,所以我只设法让所有东西都在单个组件中运行。看来你不能将片段作为反应组件返回。我无法将片段包装在div
中,因为它需要位于dl
内。
我是如何将逻辑提取到自己的组件中的?
答案 0 :(得分:0)
有什么想法可以将逻辑提取到它自己的组件中吗?
在React库的版本 <16.2.0 中不存在。
在16.2.0中,增加了对片段的支持。
不过,可以按以下方式重构DescriptionListItem
中当前createDescriptionListItemFragment
的逻辑。
const DescriptionListItem = ({props}, index) => {
const {term, description} = props;
return [
<dt key={`${term}-${index}`}>{term}</dt>,
<dd key={`${description}-${index}`}>{description}</dd>
];
}
DescriptionListItem
是一个返回片段的函数,因此可以作为映射器传递。
class DescriptionList extends React.Component {
render() {
return (
<dl className="row">
{this.props.children.map(DescriptionListItem)}
</dl>
);
}
}