React Native无法过滤道具

时间:2017-02-13 09:44:25

标签: javascript reactjs filter react-native redux

我目前正在使用react native和redux构建一个搜索栏,但无法以可以使用文本输入过滤的格式传递我的道具。

onInput(text) {
    this.setState({
      text,
    }); 
    /* Search after user stop typing */
    clearTimeout(this.inputDelay);
    this.inputDelay = setTimeout(() => {
      this.getResult(text);
    }, 1000);
  }

  getResult(text) {
    if (text.length > 0) {
      const { entitiesList } = this.props;
      const { dataSource } = this.state;

      console.log(this.props.entitiesList); // returns object containing an array
      const reg = new RegExp(text, 'i');
      const entities = entitiesList.filter((entity) => {
        return reg.test(entity.fullName);
      });
      this.setState({
        dataSource: dataSource.cloneWithRows(entities),
      });
    }
抛出

Unhandled JS Exception: _this3.props.entitiesList.filter is not a function。 This.props.entitiesList会返回一个对象,所以我不确定我哪里出错了。

{ performances: 
   [ { _id: '5893b419d2b38b7122dc24f6',
       fullName: 'Brett Monroe',
       Z3_performance_Id: '696395',
       A_relationship_Place: '1.',
       N_event_Division: 'Varsity',
       F_performance_Mark: '19.05',
       C_athlete_Id: '273452',
     },
     {...},
     {...}
   ]
}

任何提示/指示赞赏!

1 个答案:

答案 0 :(得分:4)

原因entitiesListobject,您无法直接在filter上使用map, forEach或任何其他迭代器,例如object等。 entitiesList包含一个密钥performances,即array,因此您需要像这样使用它:

  const entities = entitiesList.performances.filter((entity) => {
    return reg.test(entity.fullName);
  });