javascript - 在我的 React 应用程序中,如何在这个 map 函数中的每个项目之后添加一个换行符?
问题描述
我在我的 React 应用程序中使用了这个 redux 选择器。我已经取得了不错的进展,但我正在处理的最后一个问题遇到了困难,我觉得解决它不应该那么难,但我正在努力。
我想要实现的是在映射每个项目后,下一个项目必须换行。
export const vLineRejectionSelector = createSelector(
selectedVIdSelector,
linesSelector,
(id, lines) =>
lines
.filter(line => line.id === id)
.map(
(rejectString, index) =>
`Line: ${index + 1} ${rejectString.rejectReason}`
)
);
在此查看的唯一相关代码是 map 函数。我希望每个项目在映射时都转到新行。
输出应该类似于:
Line 1: Reject Reason One
Line 2: Reject Reason Two
相反,输出看起来像:
Line1: Reject ReasonOneLine2: Reject Reason Two
这也在 JSX 中呈现
this 的值作为 prop 传递并在 JSX 中呈现,如下所示:
<Typography variant="body2">
{rejectReason}
{reasons && reasons.join(', ')}
</Typography>
其值为 {rejectReason}。
解决方案
我建议不要在您的选择器中编写 JSX,而只是像您当前所做的那样将行作为数组返回,然后将其映射到函数<br />
中的列表或简单的连接列表render()
。这使您的选择器更易于测试,并且不会将状态选择问题与表示问题混为一谈。
例如: 在您的容器中
const mapStateToProps = (state) => {
return {
rejectReason: vLineRejectionSelector(state)
}
}
const SomeComponentContainer = connect(
mapStateToProps,
mapDispatchToProps
)(SomeComponent)
export default SomeComponentContainer
然后在您SomeComponent
的 s 渲染函数中:
<Typography variant="body2">
{this.props.rejectReason.map((rejectReason) => <>Line: {index + 1} {rejectReason}<br /></>)}
</Typography>
推荐阅读
- groovy - 使用 JUnit 5 运行 Groovy 测试用例
- javascript - 从 angularJS 控制器将焦点设置到文本框
- python - 如何使用 OpenCV 或 PIL 裁剪图像?
- django - Django 不将 PATCH 请求保存到数据库
- laravel-5 - 如何使用 spatie/laravel-tags 插件检查标签的标签唯一性
- r - 扩展数据框中缺少每个参数的日期和时间
- javascript - 为什么笔记本电脑触摸板“点击”和触摸板按钮“点击”会在 Chrome 上破坏 .hover(),但使用 PC 鼠标一切正常?
- javascript - js 从 window['id'] 与 document.getElementById('id') 获取元素
- sql - 如何计算不同年份每天的平均值
- adobe - Adobe Edge 字体网络信标