1. ホーム
  2. javascript

[解決済み] TypeError: 反復不可能なインスタンスを拡散しようとする試みが無効

2022-01-29 18:18:08

質問

アンドロイド用にコンパイルし、ストア経由でダウンロードしたところ、エラーが発生しました。

"TypeError: Invalid attempt to spread non-iterable instance"

しかし、quot;react-native run-android"を使用してもエラーメッセージが出ないので、デバッグする良い方法が見当たりません。

fetch(url)
  .then(response => response.json())
  .then(response => {
    if (this._mounted) {
      // let dataSource = this.state.articlesDataSource.cloneWithRows(response.data || [])
      //var rowCount = dataSource.getRowCount();
      var rowCount = Object.keys(response.data).length;

      if (refresh == true) {
        prevData = {};
      } else {
        prevData = this.state.articlesData;
      }
      if (propSearch == "" || propSearch == null) {
        newArticlesData = [...prevData, ...response.data];
      } else {
        newArticlesData = response.data;
      }
      if (response.meta.next_page != null) {
        var rowCount = true;
      } else {
        var rowCount = Object.keys(newArticlesData).length;
      }
      if (this._mounted) {
        this.setState({
          isLoading: false,
          //articlesDataSource: this.state.articlesDataSource.cloneWithRows(response.data),
          articlesData: newArticlesData,
          nextPage: response.meta.next_page,
          fetchUrl: url,
          rowCount: rowCount
        });
      }
    }
  })
  .catch(error => {
    this.setState({
      errorFound: true,
      errorMassage: error,
      isLoading: false
    }); 
});

よろしくお願いします。

どのように解決するのですか?

これは、"コンパイルタイム"エラーではなく、ランタイムエラーであるためです。

エラーに関連する行番号はありますか? スプレッド演算子についての質問であることから、この行だと推測されます。 newArticlesData=[...prevData,...response.data] . 私はあなたの prevData は反復可能ですが、応答データはそうでしょうか? 試しに newArticlesData=[...prevData, response.data] ?

無効なスプレッド演算子の使用例です。

function trySpread(object) {
  let array;
  try {
    array = [...object];
    console.log('No error', array);
  } catch(error) {
    console.log('error', error);
  }
}

// error
trySpread({});
trySpread({foo: 'bar'});
trySpread(4);

// no error
trySpread([]);
trySpread(['foobar']);
trySpread('foobar');