2017-01-26 7 views
4

これは奇妙な質問ですが、私は本当にこれについて興味があるので、私は尋ねたいと思っていました。リモートデバッグを有効にすると、iOSシミュレータで動作するコードがありますが、それがなくても動作を停止します。これはコードです:Reactリモートデバッガを有効にしないとネイティブコードが有効にならない

 let filtered = [] 
     let dueDate 
     const dateNow = new Date(Date.now()) 

     for (let item of this.props.listData) { 
     dueDate = new Date(item.dueDate) 
     if (!item.paid && (dueDate < dateNow)) { 
      filtered.push(item) 
     } 
     } 
     if (filtered.length > 0) {   
     this.setState({ 
      dataSource: this.state.dataSource.cloneWithRows(filtered) 
     }) 
     } 

(item.dueDateは、「2016年2月12日」のような文字列である)

明らかにコードが動作します(と、それは動作します)私が正しい形式で日付を指定した場合は( ISO "2016-02-12"のように)。興味深いのは、リモートデバッグ(Google Chromeのインスタンスを起動)を有効にすると、間違ったフォーマットでも機能するのはなぜですか?なぜなら、私がconsole.logにChromeの日付を入力すると、それらは正常に変換されるからです。前もって感謝します!

+0

正確に動作を停止しますか? – martinarroyo

+0

このフィルタはデバッガを有効にしているだけで動作していたので、正確にどこでデバッグするのは簡単ではありませんでしたが、これは日付形式のためだと確信しています。 JavaScript REPLの間違ったフォーマットでも動作しません)。 – filster

答えて

11

これは、デバイス上のJavaScript実行環境とリモートデバッガの微妙な違いが原因と考えられます。

この場合、DateコンストラクタはChromeリモートデバッグ環境ではロケール固有の日付形式を受け取りますが、デバイスでは使用できないようです。これはおそらく、コンピュータのロケールがdd.MM.yyyy形式を使用する文化に設定されており、エミュレータがen-USなどの別のものに設定されているためです。ロケールに関係なくサポートされているため、ISO形式は両方で動作します。

デバイスまたはシミュレータでコードを実行すると、コードはデバイス自体のJavaScriptCoreで実行されます。これはJavaScriptエンジンですReact Nativeは内部的にアプリケーションスクリプトを実行するために使用します

リモートでのデバッグをオンにすると、React NativeパッケージャはコンピュータのChromeのJavaScriptエンジンV8にコードを実行し、ブラウザとWebSocket上のデバイス/シミュレータ

あなたはReact Nativeのリモートデバッグを信頼できないものにする多くのエッジケースの1つに遭遇しました。デバッガなしでは、実際のデバイス上のすべての機能を常にテストする必要があります。

+0

あなたの答えはありがとう、私はこれが起こっているような何かを疑っていた。そして、あなたはデバイスのテストについて正しいです。 – filster

+0

その解決策は何ですか? ISO形式は私のために働いていません... – shinzou

+0

@kuhaku私は別の質問をすることをお勧めしますあなたが直面している問題の完全な説明 - コメントは役立つ素晴らしい場所ではありません – jevakallio

関連する問題