簡體   English   中英

如果不啟用遠程調試器,React Native 代碼將無法工作

[英]React Native code doesn't work without Remote Debugger enabled

這是一個奇怪的問題,但由於我真的對此很好奇,所以我想問一下。 當我啟用遠程調試時,我有一段代碼可以在 iOS 模擬器中工作,但沒有它它就停止工作。 這是代碼:

      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 是一個類似於“12.02.2016”的字符串)

顯然,如果我以正確的格式(如 ISO“2016-02-12”)提供日期,代碼將起作用(並且它起作用)。 我感興趣的是為什么當我啟用遠程調試(啟動 Google Chrome 實例)時,即使格式錯誤,它也能工作? 因為當我在 Chrome 中 console.log 日期時,它們會正常轉換。 提前致謝!

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

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

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

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

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

我在調試模式下的日期也有同樣的問題moment.js修復了我的問題,

起初我遇到了同樣的問題,我認為設備可能有問題。 進一步深入研究,我發現它與new Date()庫有關。

我用下面的一段代碼來解決這個問題:

  convDate(dateStr) {
    // From mm-dd-yyyy to yyyy-mm-ddThh:MM:ssZ
    var dArr = dateStr.split("-");
    return dArr[2] + "-" + dArr[0] + "-" + dArr[1] + "T00:00:00"; //2017-09-13T00:13:28
  }  

我這樣調用方法:

const check = new Date(this.convDate(givenDate));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM