为了账号安全,请及时绑定邮箱和手机立即绑定

我收到错误消息“TypeError:searchField.toLowerCase 不是函数”

我收到错误消息“TypeError:searchField.toLowerCase 不是函数”

子衿沉夜 2022-12-22 16:01:02
** 尝试运行此代码时出现错误“TypeError:searchField.toLowerCase 不是函数”,而代码正在编译成功**import React, { Component } from 'react';import CardList from '../Components/CardList';import SearchBox from '../Components/SearchBox';//import { robots } from './robot';import './App.css';import Scroll from '../Components/Scroll';import ErrorBoundry from '../Components/ErrorBoundry';import { connect } from 'react-redux';import { searchChange } from '../actions'         const mapStateToProps = state => {    return {searchField:state.searchField} }  const mapDispatchToProps = (dispatch) =>{    return {        searchField:(event) => dispatch(searchChange(event.target.value))    } }  class App extends Component {    constructor(){        super()        this.state = {            robots:[]        }       }          componentDidMount() {        fetch('https://jsonplaceholder.typicode.com/users').then(respond =>{            return respond.json()        }).then(users =>{             this.setState({robots:users})        })    }        render(){        const { searchField, onSearchChange } = this.props;        const filterRobots = this.state.robots.filter(robots =>{            //trying to search robot with either upper case or lower case            return robots.name.toLowerCase().includes(searchField.toLowerCase())        });         return(            <div className="tc">            <h1 className="head"> Robo Friend App</h1>            <div>            <SearchBox searchChange={onSearchChange}/>            </div>             <Scroll>            <ErrorBoundry>            <CardList robots={filterRobots} />            </ErrorBoundry>            </Scroll>            </div>            )    }     }  export default connect(mapStateToProps, mapDispatchToProps)(App);
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

看来您的 mapDispatchToProps函数正在searchField覆盖mapStateToProps. 所以searchFieldprop 实际上是一个函数而不是一个字符串。



查看完整回答
反对 回复 2022-12-22
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

将您的mapDispatchToProps代码块从


const mapDispatchToProps = (dispatch) =>{

  return {

      searchField:(event) => dispatch(searchChange(event.target.value))

  }

}

进入


const mapDispatchToProps = (dispatch) =>{

  return {

      onSearchChange:(event) => dispatch(searchChange(event.target.value))

  }

}

您的实现中的问题是您对 mapStateToProps 和 mapDispatchToProps 使用相同的(prop)名称,在这种情况下,稍后会覆盖第一个。


查看完整回答
反对 回复 2022-12-22
?
精慕HU

TA贡献1845条经验 获得超8个赞

您的filterRobots函数尝试在searchField仍未定义时运行


在像这样运行过滤器之前尝试检查searchField值


const filterRobots = this.state.robots.filter(robots =>{

      

       //*** add the next line

      if(!searchField) return undefined

       //trying to search robot with either upper case or lower case

      return robots.name.toLowerCase().includes(searchField.toLowerCase())

  });

这确保了这条线


return robots.name.toLowerCase().includes(searchField.toLowerCase())

仅在searchField有值时运行


查看完整回答
反对 回复 2022-12-22
  • 3 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信