2017-01-26 30 views
4

這是一個奇怪的問題,但是因爲我對此很好奇,所以我想問一下。當我啓用遠程調試時,我有一段可在iOS Simulator中運行的代碼,但如果沒有它,它將停止工作。這是代碼: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

該過濾器只能在啓用調試器的情況下工作,所以調試的確切位置並不容易,但我確定這是因爲日期格式 - 當我將其更改爲ISO時,它現在可以工作(如果我嘗試JavaScript REPL中的格式不正確)。 – filster

回答

11

這很可能是由於設備上的JavaScript執行環境和遠程調試器之間的細微差異。

在這種情況下,Date構造函數似乎在Chrome遠程調試環境中接受特定於語言環境的日期格式,但不在設備上。這可能是由於您的計算機的語言環境已被設置爲使用dd.MM.yyyy格式的文化,並將模擬器設置爲其他內容,例如en-US。 ISO格式適用於兩者,因爲無論區域設置如何,它都受支持。

當您在設備或模擬器上運行代碼時,代碼將在設備本身的JavaScriptCore中執行。這是React Native內部用於運行應用程序腳本的JavaScript引擎

當您打開遠程調試時,React Native打包程序將執行計算機Chrome瀏覽器JavaScript引擎V8中的代碼,並在瀏覽器和瀏覽器之間發送消息設備/模擬器通過WebSockets。

您已經遇到了使React Native中的遠程調試不可靠的多種邊界情況之一。您應該始終在沒有調試器的情況下測試真實設備上的所有功能。

+0

非常感謝您的回答,我懷疑會發生這樣的事情。而你在設備上測試是正確的。 – filster

+0

那麼解決方案是什麼? ISO格式不適用於我... – shinzou

+0

@kuhaku我建議問另一個問題將全面解釋你面臨的問題 - 評論不是一個很好的幫助場所 – jevakallio

相關問題