开发者问题收集

Expo/React Native 错误 - TypeError:未定义不是对象(评估“string.toLowerCase”)

2020-09-26
3675

因此,我正在制作一个 React Native 应用程序,我在 heroku 上设置了服务器和数据库。 使用 expo 在手机上和电脑上的网络浏览器中查看它。

在网络上,一切正常。

在手机上,我从屏幕截图中收到错误。我猜数据没有按时到达是一个问题,或者可能是有不同的写入方式?

有没有办法在不使用 Android Studio 的情况下在手机上获取完整的应用程序?

在此处输入图像描述

这是与错误相关的代码:

<TextInput
    style={styles.input}
    placeholder='Search...'
    onChange={(e) => { this.handleInput(e.target.value) }}
></TextInput>


handleInput = (value) => {
  if (value !== this.state.insertionIngredient) {
    this.setState({ ...this.state, insertionIngredient: value });
  };
};

handleFindButton = () => {
  this.setState({ ...this.state, isLoading: true });

  const id = searchString(this.state.insertionLanguage, this.state.data, 
                          this.state.insertionIngredient);
  const result = getById(this.state.queryLanguage, this.state.data, id);

  if (id === 'No such word in the database.' || result === 'No such word in the database.') {
    this.setState({ ...this.state, queryIngredient: 'No such word in the database.' });
  } else {
    this.setState({ ...this.state, queryIngredient: result });
  };
};

const searchString = (language, state, string) => {
  let array;
  if (language === 'english') {
      array = state.english;
  } else if (language === 'spanish') {
      array = state.spanish;
  } else if (language === 'german') {
      array = state.german;
  } else if (language === 'serbian') {
      array = state.serbian;
  };

  string = string.toLowerCase();
  let filter = escapeRegExp(string);
  let regex = new RegExp("^" + filter, "i");

  const word = array.filter(val => {
      return val.word.match(regex)
  });

  if (word.length > 0) {
      return word[0].id;
  } else {
      return 'No such word in the database';
  }};

应用程序的外观

2个回答

仅从错误信息来看,我相信您遇到了 string 未定义的情况。一个简单的解决方法是检查 string 是否存在,如果存在则应用 toLowerCase。示例:

if (string) string = string.toLowerCase();

else console.log("string 不存在,请查看它");

Bader
2020-09-26

问题是我使用了 onChange 方法而不是 onChangeText。因此,我不应该使用这个:

<TextInput
  style={styles.input}
  placeholder='Search...'
  onChange={(e) => { this.handleInput(e.target.value) }}
></TextInput>

我应该使用这个:

<TextInput
  style={styles.input}
  placeholder='Search...'
  onChangeText={(e) => { this.handleInput(e) }}
></TextInput>
Crashendo Dt
2020-10-11