javascript - React/Redux URL 不匹配:当数组项编号与对象 id 不同时
问题描述
背景
我正在为一门课程做一个最终项目。我在学习过程中学到了很多东西,但对 React/Redux 还是很陌生。
我有一组要渲染到页面的对象。我的主页网址是/programs
。用户可以点击链接进入详细信息页面。链接是/program/<id of the program>
。
我已经删除了我的数据库(Rails API)中的一些项目,因此数组中的索引号与项目的实际 ID 不同。这是显示差异示例的图像。
现在,这弄乱了/program/<id of program>
显示。我单击一个项目,然后转到错误的详细信息页面。
我已完成的故障排除
为了缓解这个问题,我在我的渲染中设置了一个过滤器来找到正确的 id。您可以在下面的代码中看到它。它以let program = this.props...
. 但是,现在我似乎无法访问programId
并且我的卡仅部分呈现。我没有<Image>, <Card.Header>, <Card.Meta>,
or的值<Card.Description>
。
我确定问题在于我如何访问每个对象中的键,我只是不知道如何解决它。
本段应要求添加。
这是一张显示 ,this.props.program
,this.props.programs
的this.props.match.params
。match.id 很好,但其他两个在组件安装之前是未定义的,因此可能会导致问题。
在此处渲染单个程序
render(){
let program = this.props.program && this.props.programs.filter(program => program.id === this.props.match.params.id)[0]
let programId = this.props.program && this.props.program.id
let watchlistValue = this.props.program ? this.props.program.watchlist : null
return(
<Grid.Column>
<Card as='div'>
<Image src={program ? program.image : null} wrapped ui={false} />
<Card.Content>
<Card.Header>{program ? program.name: null}</Card.Header>
<Card.Meta>
<span>{program ? program.network : null}</span>
</Card.Meta>
<Card.Description as='a' href={`/programs/${programId}`}>
More...
</Card.Description>
</Card.Content>
</Card>
</Grid.Column>
)
非常感谢您的时间和您的任何建议!
解决方案
问题是您尝试访问this.props.program
但未定义。你只有this.props.programs
,这就是为什么过滤功能永远不会被执行。
将其更改为:
render(){
const program = this.props.programs.find(program => program.id === this.props.match.params.id)
const programId = program ? program.id : '';
const watchlistValue = program ? program.watchlist : null
return(
<Grid.Column>
<Card as='div'>
<Image src={program ? program.image : null} wrapped ui={false} />
<Card.Content>
<Card.Header>{program ? program.name: null}</Card.Header>
<Card.Meta>
<span>{program ? program.network : null}</span>
</Card.Meta>
<Card.Description as='a' href={`/programs/${programId}`}>
More...
</Card.Description>
</Card.Content>
</Card>
</Grid.Column>
)
您仅在本地拥有程序,它不会添加到您的道具中。
推荐阅读
- python - 使用 Firefox selenium 的透明屏幕截图
- vue.js - 关于路由路径的动态类
- c# - 在 NSwag 生成的代码中反序列化来自 WebApi 的数据的问题
- docusignapi - MSI 的 Docusign 软件页面丢失?
- python - 有人可以告诉我这个python代码哪里错了吗?
- java - Android:如何将微调器值设置为 Firebase 实时数据库中的键?
- php - 如何在 Laravel Eloquent 中使用变量作为属性名
- c# - 如何在不发生某些情况下替换某些字符串
- javascript - Daily.co Iframe CSS 网格样式
- csv - CsvHelper 映射问题