【问题标题】:TypeError: "Cannot read property 'toLowerCase' of undefined" when trying to .filter()类型错误:尝试 .filter() 时“无法读取未定义的属性 'toLowerCase'”
【发布时间】:2019-12-08 08:51:10
【问题描述】:

所以我一直在尝试解决这个错误,但我一直空白。我尝试用 subreddit、key、link、type 和 body 替换 .filter() 中的标题,它们都可以正常工作而不会引发错误,只有标题给了我错误。在故障排除期间,我还放置了该 console.log 以查看是否实际存储了某些内容,并将标题打印到控制台,就像它应该有的那样,但 save.title 在 .filter 中仍未定义。我也尝试了没有 toLowerCase() 的 save.title.includes 无济于事。

有问题的代码

  renderPostTitles = () => {
    const importantValues = this.props.totalUserSaves.map((saved) => {
      return { 
        subreddit: saved.data.subreddit, 
        title: saved.data.title, 
        key: saved.data.id, 
        link: `https://www.reddit.com${saved.data.permalink}`,
        type: saved.kind,
        body: saved.data.body
      }
    })

    console.log(importantValues[0].title)
    const threadsArray_searched = importantValues.filter(saved => saved.title.toLowerCase().includes(this.props.searchQuery.toLowerCase()) )

更多组件:

import React from 'react';
import { connect } from 'react-redux';

class DisplaySaves extends React.Component {
  renderPostTitles = () => {
    const importantValues = this.props.totalUserSaves.map((saved) => {
      return { 
        subreddit: saved.data.subreddit, 
        title: saved.data.title, 
        key: saved.data.id, 
        link: `https://www.reddit.com${saved.data.permalink}`,
        type: saved.kind,
        body: saved.data.body
      }
    })

    const threadsArray_searched = importantValues.filter(saved => saved.title.toLowerCase().includes(this.props.searchQuery.toLowerCase()) )

    return threadsArray_searched.map((saved, i) => {
     return (
        <div key={saved.key}>
          <div> {i+1}. </div>
          <div> r/{saved.subreddit}: </div>
          <p> <a href={saved.link} target="_blank" rel="noopener noreferrer"> {saved.title} </a> </p>
        </div>
        )
    })
  }

  render () {
    return (
      <div>
        <div>{this.renderPostTitles()}</div>
      </div>
      ) 
  }
}

const mapStateToProps = state => {
  console.log(state)
  return { 
    totalUserSaves: state.userData.totalUserSaves,
    searchQuery: state.userData.searchQuery
   }
}

export default connect(mapStateToProps)(DisplaySaves);

【问题讨论】:

  • 你确定不是this.props.searchQuery.toLowerCase()让你伤心吗?
  • 是的,我确定,因为就像我说的那样,我尝试了其他值来代替标题,并且没有任何问题。意味着错误消失了,一切都按预期工作。
  • 我会试试title: saved.data.title || ""

标签: javascript reactjs redux typeerror


【解决方案1】:

确保标题在所有情况下都是一个字符串(未定义可能会潜入其中一个元素),您可以使用默认或字符串构造函数:

return {
  title: saved.data.title || '', 

return {
  title: String(saved.data.title), 

【讨论】:

  • 就是这样。不知道为什么它不是一个字符串,考虑到我从 reddit 获得的原始数据中它是一个字符串。
猜你喜欢
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2016-03-25
  • 2018-05-16
  • 2021-11-08
  • 1970-01-01
相关资源
最近更新 更多