[英]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.