免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

React Native 應(yīng)用遷移 OpenHarmony 實(shí)戰(zhàn):數(shù)學(xué)練習(xí)應(yīng)用開(kāi)發(fā)與調(diào)試

React Native 應(yīng)用遷移 OpenHarmony 實(shí)戰(zhàn):數(shù)學(xué)練習(xí)應(yīng)用開(kāi)發(fā)與調(diào)試 這兩年我一直有意把一些跨平臺(tái)項(xiàng)目往 OpenHarmony 上搬剛好遇到一個(gè)適合練手的場(chǎng)景數(shù)學(xué)練習(xí)。大概背景是我手上有一份用 React Native 寫(xiě)的口算練習(xí) Demo之前在 iOS 和 Android 上都跑得很順后來(lái)一次技術(shù)交流中看到 React Native for OpenHarmony 的適配層已經(jīng)能支撐常見(jiàn)業(yè)務(wù)組件就決定拿它做一次完整遷移實(shí)戰(zhàn)。這篇文章把整個(gè)過(guò)程拆開(kāi)講從工程初始化、功能實(shí)現(xiàn)到真機(jī)調(diào)試覆蓋我自己踩過(guò)也估計(jì)你們大概率會(huì)踩的坑。適合三類(lèi)人看已經(jīng)在 RN 上寫(xiě)過(guò)業(yè)務(wù)、想了解它能不能跑 OpenHarmony 的開(kāi)發(fā)者剛接觸 OpenHarmony、需要快速上手跨平臺(tái)方案的開(kāi)發(fā)者以及單純想找一個(gè)工具型 App 完整落地案例的學(xué)生。1. 項(xiàng)目定位與整體拆解1.1 數(shù)學(xué)練習(xí)這個(gè)場(chǎng)景為什么適合做實(shí)驗(yàn)田先說(shuō)業(yè)務(wù)背景。我要做的不是那種復(fù)雜題庫(kù)系統(tǒng)而是面向小學(xué)低年級(jí)的口算訓(xùn)練工具隨機(jī)出加減乘除題孩子輸入答案系統(tǒng)判斷對(duì)錯(cuò)一輪做完給正確率和用時(shí)錯(cuò)題自動(dòng)進(jìn)錯(cuò)題本。這類(lèi)應(yīng)用有個(gè)特點(diǎn)業(yè)務(wù)邏輯幾乎都集中在計(jì)算和狀態(tài)流轉(zhuǎn)上UI 以文本、按鈕、輸入框?yàn)橹鞑恍枰貓D、相機(jī)、高性能渲染這些重度原生能力。換句話說(shuō)它是典型的“邏輯驅(qū)動(dòng)型”應(yīng)用非常適合驗(yàn)證一個(gè)跨平臺(tái)框架在一個(gè)新系統(tǒng)上的成熟度。如果把應(yīng)用換成視頻剪輯或者帶大量自定義畫(huà)布的工具那 RN 適配層的壓力會(huì)大很多很多原生能力可能還沒(méi)鋪齊容易把框架短板全部暴露出來(lái)。數(shù)學(xué)練習(xí)不一樣它需要的組件無(wú)非是 View、Text、TextInput、FlatList、TouchableOpacity適配層只要把這些映射穩(wěn)了開(kāi)發(fā)體驗(yàn)和運(yùn)行效果就不會(huì)差。所以我說(shuō)它是 OpenHarmony 上做 RN 遷移的理想“小白鼠”項(xiàng)目。還有一個(gè)隱性好處教育類(lèi)工具對(duì) UI 動(dòng)態(tài)反饋要求高比如答對(duì)時(shí)背景閃綠、答錯(cuò)時(shí)抖動(dòng)這些動(dòng)畫(huà)用 RN 的 Animated 或 LayoutAnimation 就能處理不需要深入 ArkUI 寫(xiě)自定義動(dòng)畫(huà)。這樣我可以把精力放在驗(yàn)證跨平臺(tái)邏輯上而不是和系統(tǒng) UI 框架死磕。1.2 為什么不是直接用原生 ArkUI 開(kāi)發(fā)這個(gè)問(wèn)題我在動(dòng)手前問(wèn)過(guò)自己。如果團(tuán)隊(duì)里已經(jīng)有人熟悉 OpenHarmony 原生開(kāi)發(fā)直接上 ArkUI 肯定是最穩(wěn)的畢竟沒(méi)有中間層損耗。但我這邊的現(xiàn)實(shí)情況是核心業(yè)務(wù)代碼已經(jīng)用 React Native 寫(xiě)好團(tuán)隊(duì)對(duì) RN 生態(tài)也更熟ArkUI 雖然聲明式寫(xiě)起來(lái)不復(fù)雜但為了一個(gè)工具型應(yīng)用重新維護(hù)一套原生代碼成本并不劃算。更重要的是React Native for OpenHarmony 的適配方式不是套個(gè) WebView 的殼而是把 RN 的 JS 邏輯跑在系統(tǒng)自帶的 JS 引擎上再通過(guò)適配層把虛擬節(jié)點(diǎn)映射成 OpenHarmony 的原生組件。換句話說(shuō)業(yè)務(wù)層寫(xiě)的是 TypeScript / JavaScript渲染層走的是原生組件不是 HTML 頁(yè)面。這保證了性能下限和原生交互體驗(yàn)和傳統(tǒng)的 Hybrid 方案有本質(zhì)區(qū)別。當(dāng)然跨平臺(tái)不是免費(fèi)的。適配層目前還沒(méi)有覆蓋 iOS / Android 上的全部 API尤其是一些偏門(mén)原生模塊可能需要我寫(xiě)自定義原生橋接。而數(shù)學(xué)練習(xí)這個(gè)項(xiàng)目基本不碰這些偏門(mén)能力所以我只需要關(guān)注 RN 標(biāo)準(zhǔn)組件在 OpenHarmony 上的行為差異成本可控。1.3 功能范圍與版本規(guī)劃我給自己定的第一個(gè)版本功能清單如下模塊功能點(diǎn)優(yōu)先級(jí)出題引擎隨機(jī)生成加減乘除題支持難度分級(jí)P0答題交互輸入答案、提交、即時(shí)反饋P0練習(xí)會(huì)話每輪 10 題計(jì)時(shí)完成后統(tǒng)計(jì)正確率P0錯(cuò)題本自動(dòng)記錄錯(cuò)題支持重新練習(xí)P1歷史成績(jī)本地保存最近 20 條練習(xí)記錄P1設(shè)置頁(yè)選擇題型范圍、題目數(shù)量、是否計(jì)時(shí)P2我不建議第一個(gè)版本就把家長(zhǎng)端、老師端、云端同步全做進(jìn)去那會(huì)沖淡“驗(yàn)證 RN on OpenHarmony”這個(gè)主目標(biāo)。先把單機(jī)版跑通再把 P1、P2 功能加上整個(gè)項(xiàng)目節(jié)奏會(huì)舒服很多。2. 環(huán)境準(zhǔn)備與工程骨架搭建2.1 工具鏈準(zhǔn)備與版本搭配OpenHarmony 應(yīng)用開(kāi)發(fā)繞不開(kāi) DevEco Studio這是官方 IDE工程構(gòu)建、簽名、真機(jī)安裝都靠它。RN 側(cè)則需要 Node.js 環(huán)境以及社區(qū)提供的 OpenHarmony 適配腳手架和 npm 依賴(lài)包。動(dòng)手之前我建議先把以下工具裝齊Node.js建議 LTS 版本我這里用的是 18后面跑 Metro 和打包都要靠它DevEco Studio用當(dāng)前正式發(fā)布版本即可OpenHarmony SDK在 DevEco Studio 里通過(guò) SDK Manager 下載一臺(tái) OpenHarmony 真機(jī)或模擬器模擬器調(diào)試方便但有些硬件能力測(cè)不了。版本搭配是最容易被忽略的坑。RN 社區(qū)迭代快適配層一般會(huì)跟著 RN 版本走比如某個(gè)適配版本只支持某個(gè) RN 大版本。我一開(kāi)始圖省事直接裝最新版 RN結(jié)果適配包還沒(méi)跟上最后只能降級(jí)到受支持的版本。建議先查一下適配包說(shuō)明里寫(xiě)的“已支持 RN 版本范圍”再?zèng)Q定初始化用哪個(gè)模板別盲目追新。2.2 初始化工程把 RN 工程和 OpenHarmony 工程串起來(lái)這里有兩種路徑一種是從零創(chuàng)建用社區(qū)腳手架直接生成同時(shí)包含 RN 和 OpenHarmony 殼的工程另一種是已有 RN 工程再補(bǔ)一個(gè) OpenHarmony 工程接入。我這次因?yàn)槭诸^有舊 Demo走的是第二種。從零創(chuàng)建的大致命令是這樣以我用的腳手架版本為例具體命令名以你拉到的版本為準(zhǔn)npx react-native-ohos/generator-cli init MathPracticeApp --template react-native-ohos/template執(zhí)行完會(huì)生成一個(gè)同時(shí)包含harmony目錄和標(biāo)準(zhǔn) RN 目錄的工程。如果已有 RN 工程需要手動(dòng)在工程里加入 OpenHarmony 殼工程并把node_modules/react-native-ohos/...下對(duì)應(yīng)的底層庫(kù)引入殼工程。初始化完成后的第一件事不是急著寫(xiě)業(yè)務(wù)代碼而是先跑一個(gè)空模板確認(rèn) “RN 的 JS 層打包出來(lái)的 bundle 能被 OpenHarmony 殼加載”。這個(gè)環(huán)節(jié)通了后面所有開(kāi)發(fā)才有意義。我當(dāng)時(shí)第一次跑的時(shí)候卡在簽名上沒(méi)簽名裝不到真機(jī)模擬器又不穩(wěn)定折騰了小半天才把鏈路打通。2.3 工程結(jié)構(gòu)與目錄說(shuō)明生成后的工程結(jié)構(gòu)大致長(zhǎng)這樣MathPracticeApp ├── App.tsx # RN 業(yè)務(wù)入口 ├── harmony # OpenHarmony 殼工程 │ ├── entry │ │ ├── src/main/ets # 原生入口和橋接代碼 │ │ └── src/main/resources # 應(yīng)用圖標(biāo)、字符串等資源 │ ├── hvigorfile.ts # 構(gòu)建腳本 │ └── oh-package.json5 # 原生依賴(lài) ├── index.js ├── package.json └── tsconfig.json理解這個(gè)結(jié)構(gòu)的關(guān)鍵是RN 代碼是業(yè)務(wù)主體harmony目錄只是一個(gè)殼負(fù)責(zé)把應(yīng)用跑在 OpenHarmony 系統(tǒng)上并提供 JS 引擎和渲染橋接。日常開(kāi)發(fā)絕大部分時(shí)間在App.tsx和 src 目錄下的業(yè)務(wù)組件里度過(guò)不太需要?jiǎng)釉鷼?。有一點(diǎn)需要注意不要隨便改harmony目錄下的構(gòu)建文件名和包名配置。包名bundleName是 OpenHarmony 應(yīng)用的唯一標(biāo)識(shí)牽扯到安裝和更新我見(jiàn)過(guò)有人改了 bundleName 后舊數(shù)據(jù)讀不到排查半天才發(fā)現(xiàn)是包名變了AsyncStorage 的數(shù)據(jù)跟著失效。3. 數(shù)學(xué)練習(xí)核心功能設(shè)計(jì)與實(shí)現(xiàn)3.1 題目生成器避開(kāi)這幾個(gè)數(shù)學(xué)坑數(shù)學(xué)練習(xí)的靈魂是出題??此坪?jiǎn)單實(shí)際需要考慮三個(gè)原則不能出現(xiàn)“不夠減”的減法、除法必須整除、不同運(yùn)算符難度要可控。如果忽略這些二年級(jí)小朋友練到一半發(fā)現(xiàn) 3 - 8 -5或者 7 ÷ 2 3.5產(chǎn)品就沒(méi)法用了。我實(shí)現(xiàn)了一個(gè)可配置的題目生成器核心思路是先確定運(yùn)算規(guī)則再根據(jù)規(guī)則生成合法數(shù)字interface Problem { id: string; left: number; right: number; operator: | - | × | ÷; answer: number; expression: string; } function generateProblem( maxNumber: number, operator: | - | × | ÷, ): Problem { const left Math.floor(Math.random() * (maxNumber 1)); const right Math.floor(Math.random() * maxNumber) 1; if (operator -) { // 保證結(jié)果不為負(fù) const a Math.max(left, right); const b Math.min(left, right); return { id: ${Date.now()}-${Math.random()}, left: a, right: b, operator, answer: a - b, expression: ${a} - $, }; } if (operator ÷) { // 通過(guò)“被除數(shù) 除數(shù) * 商”來(lái)構(gòu)造整除題 const divisor right; const quotient Math.floor(Math.random() * (maxNumber / divisor)) 1; const dividend divisor * quotient; return { id: ${Date.now()}-${Math.random()}, left: dividend, right: divisor, operator, answer: quotient, expression: ${dividend} ÷ ${divisor}, }; } // 加法和乘法直接算即可 const answer operator ? left right : left * right; return { id: ${Date.now()}-${Math.random()}, left, right, operator, answer, expression: ${left} ${operator} ${right}, }; }減法的關(guān)鍵是用Math.max和Math.min把兩個(gè)數(shù)對(duì)調(diào)從根上避免負(fù)數(shù)。除法的關(guān)鍵是用divisor * quotient反推出被除數(shù)而不是隨機(jī)出兩個(gè)數(shù)再用浮點(diǎn)數(shù)相除。順便提一句Math.random()的隨機(jī)性足夠出題用不需要用加密級(jí)隨機(jī)數(shù)別過(guò)度設(shè)計(jì)。出題引擎寫(xiě)完后我建議花十分鐘補(bǔ)幾個(gè)邊界測(cè)試比如maxNumber5時(shí)連續(xù)生成 200 題確認(rèn)沒(méi)有結(jié)果超范圍除法題確認(rèn)所有answer都是整數(shù)。這些測(cè)試雖然簡(jiǎn)單但能攔住后面改代碼時(shí)不小心的回歸。3.2 答題交互與校驗(yàn)邏輯答題界面這邊最需要小心的是輸入框和鍵盤(pán)。數(shù)學(xué)練習(xí)只需要數(shù)字輸入所以 TextInput 要設(shè)置keyboardTypenumeric。但注意在 OpenHarmony 的原生鍵盤(pán)適配還不是很完美的情況下numeric有時(shí)候會(huì)調(diào)起支持小數(shù)點(diǎn)的鍵盤(pán)孩子誤按小數(shù)點(diǎn)了就容易提交非法內(nèi)容。我的校驗(yàn)邏輯是把用戶(hù)輸入先用Number(input)轉(zhuǎn)換再用Number.isNaN排除異常值最后比較答案時(shí)用一個(gè)極小誤差閾值。為什么不用parseInt因?yàn)閜arseInt(12abc)會(huì)返回 12把用戶(hù)輸入的臟數(shù)據(jù)當(dāng)合法值處理了不適合做嚴(yán)格校驗(yàn)。function checkAnswer(problem: Problem, input: string): boolean { const value Number(input); if (Number.isNaN(value)) { return false; } return Math.abs(value - problem.answer) 1e-6; }提交后的反饋也要設(shè)計(jì)好。我這里做了三檔答對(duì)了按鈕變成綠色提示“正確”答錯(cuò)了按鈕抖一下顯示正確答案空提交直接忽略不判對(duì)也不判錯(cuò)。這里有個(gè)交互細(xì)節(jié)空提交不該消耗一次答題機(jī)會(huì)否則孩子誤觸就白白錯(cuò)了會(huì)打擊積極性。3.3 練習(xí)輪次與難度配置練習(xí)過(guò)程我定義成三個(gè)狀態(tài)ready準(zhǔn)備開(kāi)始、doing答題中、finished本輪結(jié)束。從doing到finished的切換條件是當(dāng)前題號(hào)達(dá)到總題數(shù)而不是用一個(gè)單獨(dú)的“結(jié)束”按鈕。這個(gè)設(shè)計(jì)更貼近實(shí)際使用孩子把最后一道題做完結(jié)果頁(yè)直接出現(xiàn)中間不需要額外操作。難度配置放在設(shè)置頁(yè)影響的是題目生成器參數(shù)。比如難度最大數(shù)字可用運(yùn)算符入門(mén)10、-基礎(chǔ)20、-、×進(jìn)階100、-、×、÷配置信息會(huì)在每次生成題目時(shí)傳入但我建議在做題中途不改難度。最簡(jiǎn)單的方式是每次點(diǎn)“開(kāi)始”時(shí)讀取一次配置鎖定到本輪上下文里。如果你用全局變量存難度做題中途孩子去設(shè)置頁(yè)切了難度當(dāng)前這輪題目就亂了。4. 狀態(tài)管理與數(shù)據(jù)持久化4.1 練習(xí)會(huì)話的狀態(tài)建模useState 還不夠一開(kāi)始我用三個(gè)useState分別存當(dāng)前題、答對(duì)數(shù)、計(jì)時(shí)器結(jié)果發(fā)現(xiàn)代碼很亂提交答案時(shí)需要同時(shí)更新題號(hào)、正確數(shù)、答案列表三個(gè) setState 經(jīng)常漏一個(gè)。后來(lái)我把一輪練習(xí)的所有狀態(tài)合并成一個(gè)對(duì)象用useReducer管理思路立刻清晰了。type SessionState { index: number; problems: Problem[]; answers: (string)[]; correctCount: number; startTime: number; elapsedSeconds: number; }; type Action | { type: START; problems: Problem[] } | { type: SUBMIT_ANSWER; answer: string; isCorrect: boolean } | { type: FINISH };SUBMIT_ANSWER時(shí)把index 1、correctCount、answers一并更新結(jié)果頁(yè)只需要讀取這一個(gè) state 對(duì)象UI 和邏輯完全對(duì)應(yīng)。不要小看這一步跨平臺(tái)項(xiàng)目最怕的就是業(yè)務(wù)狀態(tài)分散在多個(gè)useState里最后調(diào) UI 時(shí)互相打架。4.2 AsyncStorage 存取練習(xí)記錄OpenHarmony 適配層提供了 AsyncStorage 的兼容實(shí)現(xiàn)接口和 RN 端一致因此業(yè)務(wù)代碼不需要針對(duì)平臺(tái)寫(xiě)差異。我用它存兩樣?xùn)|西歷史成績(jī)列表和錯(cuò)題記錄。存儲(chǔ)層我做了一個(gè)很薄的封裝統(tǒng)一處理讀取、寫(xiě)入、JSON 序列化import AsyncStorage from react-native-async-storage/async-storage; const RECORD_KEY math_practice_records; export async function loadRecords(): PromisePracticeRecord[] { const raw await AsyncStorage.getItem(RECORD_KEY); if (!raw) return []; try { const parsed JSON.parse(raw); return Array.isArray(parsed) ? parsed : []; } catch (e) { return []; } } export async function appendRecord(record: PracticeRecord): Promisevoid { const list await loadRecords(); list.push(record); // 只保留最近 20 條避免內(nèi)容無(wú)限膨脹 const trimmed list.slice(-20); await AsyncStorage.setItem(RECORD_KEY, JSON.stringify(trimmed)); }這里有個(gè)容易踩的坑AsyncStorage 的讀寫(xiě)是異步的如果連續(xù)快速調(diào)用可能出現(xiàn)后寫(xiě)覆蓋先寫(xiě)的情況。我在提交本輪結(jié)果時(shí)只用appendRecord一次不在循環(huán)里頻繁調(diào)用。另外JSON 解析失敗要返回空數(shù)組不能直接 throw否則歷史記錄一壞整個(gè) App 啟動(dòng)就崩了。4.3 錯(cuò)題本不只是記一句“做錯(cuò)了”錯(cuò)題本如果只存“3 5 做錯(cuò)了”后續(xù)重練根本沒(méi)有可用的上下文。要保證錯(cuò)題本有價(jià)值每條記錄必須包含題目表達(dá)式、正確答案、用戶(hù)當(dāng)時(shí)的錯(cuò)誤答案、出錯(cuò)時(shí)間。這樣才能做到錯(cuò)題重練時(shí)按原題復(fù)現(xiàn)。我的錯(cuò)題記錄結(jié)構(gòu)interface WrongRecord { id: string; expression: string; correctAnswer: number; wrongAnswer: string; timestamp: number; }錯(cuò)題重練和普通練習(xí)共用一個(gè)出題引擎但參數(shù)不同直接給定expression和答案不再走隨機(jī)生成器。這個(gè)復(fù)用比單獨(dú)寫(xiě)一套“錯(cuò)題練習(xí)”邏輯省事得多新功能也就一個(gè)頁(yè)面的事。有一點(diǎn)要特別提醒錯(cuò)題本存儲(chǔ)必須做去重。孩子同一道題錯(cuò)三次不要存三條而是更新原記錄的timestamp和wrongAnswer。我判斷重復(fù)的標(biāo)準(zhǔn)是expression correctAnswer相同就合并。否則跑一個(gè)月后錯(cuò)題本會(huì)膨脹到?jīng)]法看。5. 原生能力銜接與性能優(yōu)化5.1 可以接入的原生能力與接入方式數(shù)學(xué)練習(xí)不依賴(lài)攝像頭、定位這類(lèi)敏感權(quán)限但還是有兩個(gè)原生能力值得接入震動(dòng)和語(yǔ)音報(bào)題。答對(duì)時(shí)輕輕震一下答錯(cuò)時(shí)長(zhǎng)震動(dòng)這個(gè)反饋對(duì)低齡用戶(hù)非常友好語(yǔ)音報(bào)題則可以讓孩子不用盯著屏幕讀題聽(tīng)題作答。震動(dòng)在 OpenHarmony 適配層里可以通過(guò)橋接調(diào)用原生模塊實(shí)現(xiàn)但 RN 原生模塊在 OpenHarmony 上的注冊(cè)方式和 Android 不完全一樣需要在harmony/entry/src/main/ets里寫(xiě)一個(gè)原生模塊再在 JS 側(cè)調(diào)用。這部分代碼量不大我建議放到業(yè)務(wù)功能全部跑通之后再做前期別讓原生橋接干擾主流程。老實(shí)說(shuō)如果你只做單機(jī)練習(xí)不接語(yǔ)音和震動(dòng)也完全夠用。但如果你也想驗(yàn)證一下 RN 原生橋接在 OpenHarmony 上的完整鏈路那值得試一次畢竟這是跨平臺(tái)方案繞不開(kāi)的話題。5.2 bundle 打包與首屏優(yōu)化RN 應(yīng)用在 OpenHarmony 上有兩種加載 bundle 的模式開(kāi)發(fā)模式連 Metro運(yùn)行時(shí)按需拉取發(fā)布模式把 bundle 打包進(jìn) hap 包安裝后離線加載。首屏優(yōu)化最關(guān)鍵的是把發(fā)布模式的預(yù)打包做對(duì)。我的做法是先在工程里配置好assets/index.bundle的輸出路徑然后在構(gòu)建 hap 之前先執(zhí)行打包腳本讓 JS bundle 進(jìn)到entry/src/main/resources/rawfile下。這個(gè)過(guò)程有點(diǎn)繞如果發(fā)現(xiàn)真機(jī)上長(zhǎng)時(shí)間白屏優(yōu)先懷疑 bundle 文件有沒(méi)有真的打進(jìn)包里。另一個(gè)優(yōu)化點(diǎn)是拆分“首屏等待”。數(shù)學(xué)練習(xí)首頁(yè)啟動(dòng)時(shí)需要讀本地設(shè)置如果每次都在頁(yè)面上 await用戶(hù)會(huì)看到白屏。我改成先渲染默認(rèn)設(shè)置再異步加載本地配置并更新界面。雖然差了零點(diǎn)幾秒但啟動(dòng)感知差別明顯。這套思路在 RN for OpenHarmony 上同樣有效因?yàn)樗簧婕霸阅苷{(diào)優(yōu)而是從用戶(hù)體驗(yàn)出發(fā)做取舍。5.3 列表卡頓與渲染優(yōu)化歷史成績(jī)和錯(cuò)題本都用 FlatList 實(shí)現(xiàn)。FlatList 在 RN on OpenHarmony 上能用但需要注意三件事第一每條列表項(xiàng)的數(shù)據(jù)結(jié)構(gòu)要盡量扁平不要在 renderItem 里做復(fù)雜計(jì)算。比如歷史成績(jī)里的“正確率”和“時(shí)長(zhǎng)”字段我是在寫(xiě)入記錄時(shí)就算好存下來(lái)渲染時(shí)直接讀字段不對(duì)源數(shù)據(jù)做二次計(jì)算。第二必須設(shè)置穩(wěn)定且唯一的keyExtractor。我用的是記錄里的id字段不用數(shù)組 index。原因很簡(jiǎn)單列表項(xiàng)如果只是 index插入或刪除時(shí)會(huì)引發(fā)整頁(yè)重渲染OpenHarmony 上的表現(xiàn)會(huì)更敏感。第三避免在renderItem里使用內(nèi)聯(lián)箭頭函數(shù)。寫(xiě)成renderRecord{this.renderRecord}而不是renderItem{() Item/}這樣列表復(fù)用節(jié)點(diǎn)時(shí)才能命中優(yōu)化路徑。這個(gè)點(diǎn)在 Android 上不明顯但我在 OpenHarmony 上測(cè)試時(shí)內(nèi)聯(lián)函數(shù)和高頻刷新同時(shí)出現(xiàn)滾動(dòng)確實(shí)會(huì)掉幀明顯。6. 真機(jī)調(diào)試與問(wèn)題排查6.1 從白屏到跑起來(lái)調(diào)試基礎(chǔ)操作RN on OpenHarmony 的調(diào)試思路和 Android 類(lèi)似但也有自己的怪脾氣。真機(jī)連接 DevEco Studio 后先確認(rèn)設(shè)備能安裝 hap 包再確認(rèn) Metro 服務(wù)是否正常啟動(dòng)。我碰到過(guò)的情況是Metro 沒(méi)開(kāi)應(yīng)用裝上了也白屏日志里一堆“bundle load failed”。開(kāi)發(fā)模式下手機(jī)和電腦必須在同一局域網(wǎng)而且 Metro 的監(jiān)聽(tīng)地址不要用localhost否則真機(jī)訪問(wèn)不到。我直接在命令行里跑react-native start --host 0.0.0.0這樣手機(jī)可以通過(guò)電腦的局域網(wǎng) IP 訪問(wèn) Metro。日志這塊也有坑。OpenHarmony 的 hilog 和 RN 的 console 不一定完全打通有時(shí)候業(yè)務(wù)代碼報(bào)錯(cuò)了DevEco 控制臺(tái)看不到信息。我的做法是給關(guān)鍵流程加一份本地日志寫(xiě)入比如記錄“bundle 加載完成”“題目生成成功”“存儲(chǔ)執(zhí)行成功”這些打點(diǎn)真機(jī)出問(wèn)題時(shí)先看這些打點(diǎn)再回頭查 hilog。6.2 常見(jiàn)問(wèn)題速查表現(xiàn)象可能原因排查思路真機(jī)安裝失敗包簽名不對(duì)在 DevEco Studio 里重新配置簽名確認(rèn) bundleName 和證書(shū)匹配白屏且無(wú)報(bào)錯(cuò)bundle 未打進(jìn) hap 或 Metro 未啟動(dòng)檢查 rawfile 下有沒(méi)有 bundle 文件確認(rèn) Metro 可用中文輸入法無(wú)法調(diào)起TextInput 的鍵盤(pán)類(lèi)型與系統(tǒng)沖突用keyboardTypenumeric并測(cè)試不同輸入法版本樣式不一致部分 RN 樣式屬性未完全映射查看適配層支持的樣式列表用boxShadow等屬性時(shí)預(yù)留降級(jí)方案AsyncStorage 讀不到數(shù)據(jù)bundleName 或應(yīng)用被卸載確認(rèn)包名未改變卸載重裝會(huì)清空本地?cái)?shù)據(jù)滾動(dòng)列表卡頓renderItem 內(nèi)聯(lián)函數(shù)或 key 不穩(wěn)定設(shè)置穩(wěn)定 key抽離 renderItem 為獨(dú)立方法這張表不是從文檔里抄的都是我自己在真機(jī)上一個(gè)一個(gè)試出來(lái)的。尤其是樣式不一致那條boxShadow在 Android 上已經(jīng)支持得不錯(cuò)但 OpenHarmony 適配層早期版本并不支持代碼里不寫(xiě)降級(jí)界面上就是干巴巴一個(gè)平面。我最后統(tǒng)一抽了個(gè)Card組件內(nèi)部做平臺(tái)兼容判斷業(yè)務(wù)層不用關(guān)心細(xì)節(jié)。6.3 我踩過(guò)的兩個(gè)關(guān)鍵坑第一個(gè)坑是數(shù)字鍵盤(pán)調(diào)起后中文輸入法還是能輸入字母。孩子做題時(shí)切到手寫(xiě)輸入法TextInput 拿到的是“三”而不是“3”Number(三)返回NaN校驗(yàn)直接判錯(cuò)。這個(gè)問(wèn)題的根子在鍵盤(pán)類(lèi)型只影響“彈出的面板”不影響輸入法引擎。我最后的處理是校驗(yàn)時(shí)只接受數(shù)字字符串檢測(cè)到非數(shù)字字符立即清空并提示“請(qǐng)輸入數(shù)字”。這個(gè)方法看著暴力但對(duì)低齡用戶(hù)其實(shí)最有效因?yàn)殄e(cuò)誤輸入被即時(shí)糾正了。第二個(gè)坑是提交按鈕快速點(diǎn)擊導(dǎo)致一次答題被記錄兩次。原因很簡(jiǎn)單點(diǎn)擊提交后 setState 還沒(méi)觸發(fā)重渲染按鈕一直處于可點(diǎn)擊狀態(tài)第二次點(diǎn)擊進(jìn)來(lái)時(shí)當(dāng)前題還是同一道答案被重復(fù)記錄。解決辦法是在提交入口加一個(gè)短鎖提交后立刻把按鈕disabled置為 true同時(shí)用一個(gè) ref 記錄isSubmitting直到當(dāng)前題索引變化后再恢復(fù)。這個(gè)問(wèn)題的排查過(guò)程也提醒我RN on OpenHarmony 的重渲染時(shí)機(jī)和 Android / iOS 略有差異不要完全依賴(lài) UI 狀態(tài)做并發(fā)控制。最后再說(shuō)一個(gè)個(gè)人心得數(shù)字和引號(hào)之類(lèi)的小問(wèn)題在 iOS / Android 上可能影響不大但在新適配平臺(tái)上都會(huì)更容易暴露。不要假設(shè)某個(gè)交互在當(dāng)前平臺(tái)表現(xiàn)正常一定要在真機(jī)上按真實(shí)用戶(hù)操作路徑完整跑一遍尤其是鍵盤(pán)、觸摸、焦點(diǎn)這類(lèi)和系統(tǒng)強(qiáng)相關(guān)的交互。數(shù)學(xué)練習(xí)這個(gè)項(xiàng)目做完我最大的收獲不是 RN 代碼本身而是學(xué)會(huì)了把所有“跨平臺(tái)想當(dāng)然”都當(dāng)成風(fēng)險(xiǎn)來(lái)處理。這個(gè)項(xiàng)目后續(xù)還可以繼續(xù)擴(kuò)展的方向很多比如把錯(cuò)題本導(dǎo)出成本地報(bào)告、增加多用戶(hù)切換或者加入語(yǔ)音聽(tīng)題功能。如果你們也在做類(lèi)似遷移建議保持耐心先把最小功能完整跑通一遍再逐步疊加能力。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
午夜丁香婷婷| 五月天婷婷伊人| 久草婷婷在线| 丁香五月激情图片| 成人av免费观看| 激情久久久| 婷婷五月丁香久久| 丁香六月 婷婷六月| 日本无码专区| 五月婷婷五月天| 久久婷婷六月综合资源| 91人妻PORNY九色大屁股| 人人摸人人干| 久久九九热视频| 99A片| 婷婷五月色综合| 日韩成人精品中文字幕| 日韩啊啊啊| 婷婷六月丁香在线| 九九综合九九| 久热丁香| 婷婷丁香www视频日本韩国| 四色永久成人网站| 在线观看亚洲AV| 五月花婷婷在线精品视频| 激情婷婷五月天| 丁香色情五月综合网站| 亚洲人人96@| 色丁香五月婷婷综合久久| 色情婷婷| 色婷婷五月在线| 色青青五月| 婷婷色在线播放| 中文字幕日本最新乱码视频| 中文字幕日产A片在线看| 91丨九色丨白浆| 欧美色欲色欲天天天www| 操B五月天| 九九99男女视频在线观看| 国产3p露脸普通话对白| 五月激情在线| 五月天激情视频| 成人电影AV在线观看| www激情网| 五月激情婷婷图片基地| 色色色视频免费无码 | 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 99视频在线播放大全| 五月婷婷就去色| 久久视频婷婷| 任你擦免费视频| 97色碰碰公开视频| 吊色AV男人的天堂| www.色综合| 九九九九大香蕉| 日本玖玖在线| 久久婷综合网| 色情丁香五月婷婷精品| 99热免费精品热久久66| 婷婷婷五月天最新综合你懂的| 亚洲色色色色色色色色色| 色色五月天丁香| 久久精彩免费视频精彩免费视频| 丁香五月亚洲综合| 激情久久久久久| 91热爆在线| 五月成人天| 亚洲精品乱码久久久久99| 国产9色在线/日韩| 九九久久精品| 中文字幕 久久9999| 99热20| 丁香五月老师| 五月天婷婷乱论小说| 夜夜夜夜夜骑撸| 天天操天天爽天天爱| 天天色天天| 久久丁香五月天| 激情综合婷婷| 青青草青青草五月天| 六月五月天婷婷涩播在线| 亚洲日比视频| 六月撸婷婷| 色热久| 丁香花婷婷五月天| www久| 亚洲天天免费| 97色片| 色五月大香蕉| 欧美大香蕉视频| 婷婷五月天国产精品| 婷婷丁香第一页| 天天干狠狠艹| 秋霞免费视频| 五月婷色色| 99色1| 五夜婷婷| 五月情涩综合婷婷| 久久99成人性爱高清视频| 日日夜夜天天| 91fuliwang| 丁香色五月 97干| 三十路磁力链接| 激情综合五月| 久99久视频精选| 精品久久99码| 久久久久亚洲AV无码网影音先锋| 99操不停| 六月婷婷激情小说网| 网色99| 翔田千里aV中文字幕| 婷婷五月天狠狠| 色五月综合| 97成人丁香| 爱性综合网| 人人干av| 成人丁香五月婷| 五月天色婷婷图片| 五月丁香综合激情| 丁香五月婷婷亚洲人| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪 | 九九综合| 久9热| 另类五月激情| 97在线日本| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 四虎99热在线观看网站| 丁香五月婷婷色| 久色激情| 六月香五月婷| 4399无码视频| 这里只有精品视频一区| 久久久五月天婷婷| 丁香激情五月少妇| 99热 在线播放| 天天开心AV色综合婷婷五月天| 婷婷五月天久久久| 日日日日做夜夜夜夜无码| 无码人妻电影| 五月六月丁香激情视频| 五月色情婷婷开心五月天| 欧美黄色韩日网| 五月天丁香色色| 情五月亚洲婷婷| 97操碰| 五月丁香999| 日韩AAAAAAAAAAA片| 色色色九九九五月婷婷| 免费观看欧美成人AA片爱我多深 | 九九视频精品在线免费| 免费一区二区三区| 久久婷婷综合五月天| 色网站9| 亚洲国产色色| 超碰在线观看成人视| 婷婷六月伊人| 久9精品视频| 色七七九九| 草榴视频网| 综合一区二区三区| www.91.com处女在线直播| 九九热免费| 五月婷婷色播视频| 日韩三十六页| 久久狼人天堂| 六月婷婷私欲| 久久婷婷丁香| 熟女人妻一区二区三区免费看| 婷婷久久免费看| 欧美性生交XXXXX无码小说| 亚洲性爱99在线| 九月性爱网| 丁香婷婷情色五月天| 小色小蛇伊人婷婷色香五月| 性爱视频久久| 亚美欧色影院| www久久99com| 正宗黄色毛片| 黄色片久久| 婷婷五月视频| 99re思思| 亚洲超级碰| 91久久久久久久| 五月婷婷在线视频免费观看| 9久热在线精品| 91狠狠色色丁香婷婷综合久久| 九九热黄色| 熟妇人妻中文字幕无码老熟妇| 久色欧美| 琪琪理论片| 色狠狠婷婷| 久久伦乱| 五月天狠狠草| 五月婷婷亚洲天堂激情在线| 成人在线视频一区| 欧美大片免费播放器| 这里只有精品网| 97碰久久| 丁香五月激情欧美| 少妇出轨做爰高潮A片| 性爱视频久久| 思思国产99| 久碰视频| 久久婷.com| chaopengdaxiangjiao| 丁香五月中文字幕色播| 丁香五月天成人| 香蕉久久国产av一区二区| 欧美日综合| 婷婷欧美激情| 五月婷深深爱激情网| 色五月婷婷操逼| 亚洲成人在线观看av| 99九九玖玖| 婷婷五月色丁香在线看| 婷婷丁香久久五月综合| 噜噜狠狠| 超碰人人在线| 色噜噜狠狠色综无码久久合欧美| 欧美五月婷婷| 日本色五月| 婷婷六月插屄激情| 丁香五月婷婷性爱| 色呦呦免费观看| 中文超碰视在线| 九九在线视频| 色色婷婷五月天| 任你日视频| 深情五月天| 激情99。| 激情婷婷综合| 99热 免费| 成人五月天丁香婷| 激情AV在线| 99热亚洲综合| 日韩免费99| 人五月天婷婷喷水| 99热午夜精品| 色婷婷AV久久| 美女xx不卡| 欧美黄色一级| 一区二区三区四区牛| 狠狠干五月| 大学生高潮无套内谢视频| a网站免费观看| 天天搞天天爽| 淫视馆AV在线| 大香蕉人妻| 成人丁香色| 亚洲成人五月| 亚洲成人AV在线播放| 色99视频| 五月色网| 五月婷婷久久综合| 野战J办公桌椅H| 亚洲综合另类| 五月桃花网综合| 99精品偷自拍| 欧美日韩中国| 99久热在线精品| 国产成人高清| 婷五月丁香| 久草久青福利| 96五月丁香熟女| 色综合久久88色综合天天| 精品成人无码A片观看香草视频| 日日色五月天| 人人爱人人摸人人澡| 久久激情五月网| 成人五月天视频播放| 天天谢天天操| 欧美99视频| 婷婷六月色| 少妇性按摩无码中文A片| 91chinese在线| 八戒青柠影视剧在线观看| 亚洲精品V天堂中文字幕| 丁香五月激情综合久久| 五月丁香无码| 夜夜操夜夜姧| 色五月天丁香婷婷| 少妇水多A片太爽了| 亚洲精品无码A片一区二区| 99热12| 洗浴中心操B视频| 色导航色婷婷五月天在线观看| 激情综合激情综合| 综合色播| 人妻激情视频| 综合色天天| 国产婷婷色综合AV蜜臀AV| 五月丁香啪啪啪| 五月丁香啪啪网| 五月丁香六月激情| 丁香色成人| 99热20| 婷婷五月婷| 久久九色| 91/九色黑人| 五月婷婷深深爱| 婷婷五月丁香av网站| 最新五月天婷婷影| 久热伊人| 超碰97免费在线| 亚洲天堂亚洲色色色| www.深爱激情| 激情综合五月天| 日本欧特黄色刺激一区影视久精品无码| 丁香花五月天激情| 综合色播| 五月成人丁香av91| 亚洲婷婷丁香五月在线| 久婷婷婷| 91九色无码内射| 精热在线综合网| 99热这里只有免费精品| 五月丁香成人网| 高清成人综合| 五月天伊人网| 五月开心深深爱激情综合| 欧美久久婷婷| 综合激情在线视频| 99色视频| 人操91在线| 婷婷五月综合婷婷| 五月天伊人网| 五月婷婷综合激情网| 久热这里只有精品视频免费观看| av操逼网| 成人网站免费sxj| 色色色9| WWW.久久久久久久久久久久久| 色人五月婷婷| 国产毛片精品一区二区色欲黄A片| 六月丁香色色色| 天天综合网网欲色| 青青草99re| 婷色成人| 国产精品涩涩涩视频网站 | 五月丁香婷中文| 天天操人人干| 日韩无码系列| 色婷婷五月天偷拍| www91久久| 丁香五月天中文字幕| 三级毛片视频| 涩五月色婷婷| 色五月婷婷天堂| 中文字幕久久一区二区三区| 超碰免费人人肏| 熟女五月天久久综合| 人妻啪啪啪| 欧美激情综合| 丁香九月激情| 五月丁香欧美| 亚洲成人AV电影网| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 色色色综合网| 色五月在线| 中字幕视频在线永久在线观看免费 | 天天做夜夜爽| 亚洲视频操| 91九色视频在线观看| 综合色网站| 人人操人人干AV| 九月激情综合| 色色国产| 色天天综合| 综合久久五月| 日本不卡中文字幕| 欧美丁香婷婷天天操| 亚洲九九夜夜| 日韩欧美骚货| 亚洲综合婷婷五月| 日韩成人无码| 日本天天色| 亚洲99在线| 在线婷婷| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 99ri在线| ss99热| 婷婷丁香激情五月天色色| 国产av天天插天天操天天爽| 99成人| 中文字幕av久久爽一区| 国产精品久久久久久久久久免费| 色情五月停停丁香| 天天摸天天肏| 狠狠插.com| 另类小说激情五月天| www.99日本| AV操操操| 亚洲激情综合免费| 亚洲无码另类| httpwww色com日本| 亚洲另类在线观看| 午夜色丁香| 成人 在线 日韩| 精品一二三区久久AAA片| 激情婷婷六月| 五月丁香狠狠爱| 激情人妻蜜夜系列区| 久久精热| 激情五月天之六月婷婷| 亚洲人妻Av| 丁香六月婷| 天天插插天天| 欧美综合丁香网| 99re免费在线视频| 亚洲岛国电影| 99∨VTV| 五月天婷婷影院影院观看| 另类视频一区| 丁香六月av| 香蕉综合网| 色婷婷婷婷五月天| 天天操天天操天天操| 伊人9在线| 丁香五月影| 久久综合九九| 久久视频婷婷| 人人爱人人添| 婷婷久久六月费| 亚洲无码播放| 欧美超级视频97| 伊人高清无码| 丁香六月综合激情| 99久热这里只有精品| 欧美五月丁香| 国产VA亚洲VA96| 狠狠干综合| 噜噜色婷婷| 丁香五月第九色| 色情久久久| 996黄色片| 少妇人妻偷人精品无码视频新浪| 99色热| 丁香激情五月| 五月婷在线| 性生活久久人妻| 五月天婷婷在线啪啪视频| 91丨九色丨丰满人妖| 综合激情四射一theav| 99国产精品白浆在线观看免费| 久热AA| 99热这里只有精品9| 热99re| 欧洲亚洲免费视频区| 色综合激情| 综合一区二区三区| 9 99免费视频| 永久免费视频| 夜夜资源站| 91艹人| 六月激情丁香一道本7777| 色色色激情网| 日本网站久久| 久久影视婷婷五月| 秋霞日本免费毛片A片| 综久久久| 九九综合网色全集 | 青青草视频免费观看| 五月丁香网站| 99国产精品久久久久久久久久久| 国产99久久久国产精品免费看| 成人片在线播放| 欧洲亚洲精品| 国产做爰视频免费播放| 婷婷色情 | 99小精品| 五月丁香六月停停| 天天婷婷色六月| 五月丁香六月婷婷亚洲综合| 九九精品亚洲| 深爱激情综合网| 婷婷五月色播| 波多野结衣不卡AV| 美欧成人视频| 亚州精品色情无码A片| 狠狠看狠狠| 婷婷五月天无码熟女| 可以直接看的av网站| 另类视频丁香五月| 色天堂A| 午夜色婷婷| 五月天色色色| 亚洲一二三网| 亚洲综合久| 亚洲日韩国产黑丝黑丝AVAV一区二区三区| 婷婷综合网在线| 五月综合婷婷久久在线| 婷婷五月色色| 久热这里| 久久五月婷婷视频| 性五月激情| 激情婷婷狠狠干| 天天操夜夜橾| 日日操日日撸| 91九九热| 99在线精品视频观看免费下载| www.久久五月天.com| 色婷婷五月天不卡| 中文字幕 中文字幕明步| 欧美69久成人做爰视频| 强伦轩人妻一区二区电影| 丁香女人五月天| 不卡影院午夜理论片| 永久免费视频| www.91热久久| 99er这里只有精品视频| 天天噜噜| 五月丁香直播| 97热在线精品| 婷婷五月天天| 综合亚洲色色| 极品另类| 色操综合| 99er6| 日本婷婷| 婷婷丁香成人色综合| 久久99久久99精品免观看粉| 亚洲人人操BD| 婷婷午夜| 婷婷91| 午夜婷婷六月天| 九九热99热| 丁香97综合| 九九热只有这里是精品| 丁香五月91| 色色色色色色色色色色色色色色,网站| 久久婷五月婷| 99九九视频精彩在线| 久久艹 五月天| av大香蕉| 成人婷99最新| 色www.con| 五月婷婷激情四月| 免费无码毛片一区二区A片| 日韩不卡DvD| 婷婷激情视频欧美视频自拍视频欧美剧| 俺去也婷婷| 嫩草视频在线观看| 九九大香视频| 五月丁香人妻| 久久精热| 91九色无码内射| 秋霞影音91人妻久久| 国产激情综合五月久久| 夜夜夜天天操| 91久久婷婷| 小骚穴电影| 可以看的AV网站| 琪琪布丁香社区激情五月天| 色五月婷婷大| 久久久五月激| 亚洲精品无人区| 丁香婷婷五月天校园春色| 五月丁香亭亭操逼| 中文精品在| 婷婷激情六月视频| 久久久久8888| 99精品久久| 婷婷四色五月| 99综合视频| 久热人妻| 91丨九色丨国产打屁股| 深爱丁香网| 人人草人人舔| 五月色欧美| 少妇搡BBBB搡BBB搡毛茸茸| 五月天天天开心激情网| 69凹凸成人综合网| 久久少妇视频| 婷婷久久性爱| 丁香五月婷婷啪啪| 激情综合5月| 欧美人与性动交CCOO| WWW.桔色成人.COM入口| 亚洲av另类在线观看| 五月天色婷婷激情| 熟女网站久久| 久久99热这里只频精品6学生| 天天色·欧美| 丁香五月激情图片婷婷| 综合激情视频| 久久99精品九九久久久婷婷| 色播五月婷婷| 另类综合婷婷五月天欧美视频| 色很久综合| 9l视频自拍九色9l视频自拍九色9l社区| 91一起艹| 无码激情AAAAA片-区区| 日日日日操| 99色在线观看视频| 香蕉久久国产AV一区二区| 天天插天天草人人玩| 久9综合| 国内外色色色色色成人视频| 五月婷婷新网站| 亚洲中文字幕在线观看| 五月丁香综合| 影音先锋 91工厂| 丁香五月天社区婷婷| 日本一毛片| 色五月久久成人婷婷| 五月丁香亚州综合网| 4438激情网| 亚洲avjiujiur91| 91在线视频观看午夜福利| 婷婷五月婷婷| 五月丁香六月婷婷亚洲激情综合| 99 福利 导航| 亚洲成av人影院| 激情图片五月天| 久热这里只有精品性色AV| 免費观看aV在线网址| 色婷婷大香蕉| 五月丁香欧美在线| 《诡秘之主》在线观看| 亚洲无码激情| 五月色情| 丁香五月天啪啪| 天天干天天操| 66久久视频在线| 五月婷婷激情| 九九热这里只有国产精品| 欧美在线97| 色色色com| 亚洲区视频| 精品草原久久视频| 99热这里有精品6| 伊人色综合久久久| 人五月天婷婷喷水| 五月激情天| 五月天激情视频| 天天爽天天透天天爱| 日本超碰在线| 五月丁香六月婷婷久久肏| 超碰国产在线播放| 五月丁香六月婷综合成人综合| 色婷婷综合网| 人妻VideOssS人妻高清| 国产va在线视频| 无码啪啪| 久久激情五月网| 狠狠狠狠狠狠草| 拍真实国产伦偷精品| 内射丰满人妻| 国产性爱一级| www.久久爱.com| 五月婷婷香| 这里只有精品在线播放| 亚洲另类婷婷五月丁香在线播放| 日本美女上人| 日本人人干| 色99视| 久草丁香婷婷1024| 97高清国语自产拍| 四色永久成人网站| 国产激情综合五月久久| www久久久| 97碰在线| 大香蕉伊人久久| 人妻九九九九| 五月天久久婷婷| 九九99九九99| 开心五月激情网| 婷婷五月天奸女| 五月丁香激| 棕合影院色色| 久久99婷婷| 六月色色| 97人人射| 丰满少妇乱A片无码| 婷婷综合另类小说| VA婷婷| 激情精品久久| 先锋资源 996| 激情五月婷婷色| 都市激情五月婷婷亚洲| 丁香五月a| 色99在线观看| 天天看A片| 99热66| 内射爽无广熟女亚洲| 风流少妇A片一区二区蜜桃| 野战J办公桌椅H| 开心五月婷婷伊人| 丁香五月激情网| 成人av中文字幕| 俺也去婷婷五月天第五色| WWW丁香五月| 婷婷综合六| 色五月婷婷五月| 色婷婷狠狠爱| 国产精品涩涩涩视频网站| 字幕网AV中文字幕| 色婷婷色综合激情91| 另类视频综合| 久久成人精品视频| 久久亚洲天堂| 五月天激情小说| 91色五月在线观看| 99碰碰视频| 婷婷丁香人妻| 成人在线视频一区| 99国产精品久久久久久久久久久 | 饮料下药迷倒漂亮女同事强干| 99热这里有精品| 婷婷热色| 99热情这里只有精品在线播放| 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 五月天激情无码| 九月丁香婷婷| 天天日日| 五月天婷婷久久| 艾小青av| 九九av| 99视频综合| 99九九玖玖| 激情亚洲色图片丁香综合| 五月婷婷激情网| 被强行糟蹋的女人A片| 亚洲AV无码影院| 99热在线免费观看精品| 日韩欧美成人片| 欧美色片中文字幕久久久久| 九九九热精品| www.henhengan| 永久思思热在线| 丰满熟女人妻一区二区三| 26uuu成人网| 九9九9无码| 爱草视频在线| 色综合久| 色激情五月| 天天色天天舔天天爱天天爽| 在线只有精品| 国产成人AV在线播放| 色狠狠图片| 这里只有精品1| 91pornav在线| 这里只有精品在线免费视频| 久久色情| av在线免费播放| 色婷婷狠狠18| 91919191919久久成人视频| 亚洲操操| 99热亚洲| 色欲婷婷五月天丁香| 五月丁香激情婷婷综合| 91综合在线| 人妻22p| 色婷婷丁香五月| 97超碰99热99| 伍月婷丁香花全集| 北条麻妃九九九国产精品视频| 五月丁香啪啪啪综合网| 日韩人妻无码精品| 色综合狠狠色| 夜夜干天天操| 色很久综合| 天天干天天射色综合| 激情婷婷丁香五月| 色天天久婷婷| 欧美成人猛片AAAAAAA| 丁香六月AV| 一级性爱视频| 国产免费一区二区在线A片视频| 97热这里精品在线视频| 91凹凸在线| 九九综合色综合| 九九十99视频| 久久色天堂| 99热99久久| 免费啪啪亚州视频| 1024国产| 99久久激情视频| 丁香 婷婷 激情 综合 五月| 日韩啊啊啊| 天天色一道本综合婷婷| 欧美经典片免费观看大全| 小视频aaa久久久| 久久久GOGO无码啪啪艺术 | 国产精产国品一二三在观看 | 丁香五月综合高清在线| 99只有精品| 欧美婷婷五月激情| 久99久视频精品| www99热| 久婷婷色| 99热免费精品| 色五月婷婷在线视频| 国产精品久久久爽爽爽麻豆色哟哟| 五月天婷婷色播在线网| WWW.五月com| 色婷婷色99国产综合精品| 99热最新精品| 天天色视频| 欧美猛片| 最新日韩久热免费视频看看| 91啪啪视频| 五月天婷a在线| 91 欧美| 99精品在线观看视频| 久久人人九九| 国产精品久久久久久久久久免费 | 99热在线中文字幕| 激情六月丁| www.五月婷婷| 欧美成人AAA片一区国产精品| 激情五月天色婷婷| 99碰碰视频| 99国产精品久久久久久久久久久| 丁香 婷婷 亚洲 熟女| 991精品在线视频| 精品久久99| 婷婷激情五月天小说校园| 99精品在线观看视频| 成人视频网| 免费亚洲婷婷| 婷婷五月天无码视频| 秋霞少妇毛片| 婷婷五月综合在线| 丁香六月婷婷色XXXXX| 天天日天天做天天舔| 99在线视频网址在线观看| 六月婷婷综合激情| www.婷婷,com| 另类图片天天影视在线观看| 色综合久久久综合久久网 | 五月丁香综合啪啪| 久草热视频在线观看| 婷婷97| 亚洲99一级无嗎特制在线| 国产无套精品一区二区| 色丁香五月婷婷在线| 综合色情网| 丁香婷婷浪潮AV久久综合| 亚洲精品大片| 丁香婷婷月| 激情小说五月天中文字幕| 91精品婷婷国产综合| 中文字幕成人网站| 亚洲天天| 日日夜夜天天| 五月激情综合深爱| 国产xxxxx在线观看| 久久久27操| 日本91在线播放| 五月天婷婷影院| 操逼巨乳91| aaa日韩| 99久久a线观| 人人干99| 婷婷伊人綜合| 色色五月天 亚洲| 激情综合亚洲| 夜夜操天天干| 色婷婷激情| 五月天国产婷婷精品视频在线| 激情网 五月天| 99熟女| 五月丁香激| 欧美69色| 天天日P天天射P| 亚洲妇女熟BBW| 日本狠狠干| 色婷五月天| 天堂中文国产| 99玖玖在线视频| 五月天综合| 婷婷开心激情| 丁香婷婷色五月| 日本性激情色播| 色欲一区二区三区精品A片| 色婷婷基地| 久久色区| 欧美99热| 欧美精品999| 大香蕉人妻| 人妻综合网| 丁香五月婷婷啪| 六月丁香综合| 色三级色三级| 级情九色| 夜夜躁爽日日| 大香蕉久操| 欧美性爱五月天| 天天爱天天操| 国产肥白大熟妇BBBB视频| 中文字幕无码人妻少妇免费视频| 99婷婷| 嫩草AV久久伊人妇女超级A| 婷婷色五月激情| 欧洲色色| 国产做爰视频免费播放| 欧美叉叉叉BBB网站| 黄色三级毛片中字| 九色视频九色九色91jiuseshipin| 亚洲婷婷性爱| 免费观看日韩成人av| 大胆伊人久久| 日本啪啪网| 超碰免费在线| 这里只有精品99视频| 天天做天天爱天天爽在| 婷婷四色五月| www.99情趣网| 激情五月综合网最新| 91丨九色丨大屁股| 久久久人妻| 69凹凸成人综合网| 亚洲欧洲一二| 影音先锋一区| 熟女激情网| 久久66精品| 久久99网| 激情丁香五月天| 免费无码毛片一区二区A片| 丁香五月婷婷啪啪视频| 超碰99热精品| 深爱丁香网| 久久久久久五月天| 婷色五月天| 中文字幕人妻熟女在线| 大香久久综合网| 91狠狠色色丁香婷婷综合久久| 5月激情天| 亚洲 五月 婷婷 成人| 亚洲午夜一区二区| 五月天婷婷色色| 色婷婷丁香AV综合| 97久久视频| 99色看| 国产成人高清| 亚洲国产精品SUV| 日韩AV中文字幕在线| aaaaa不卡| 99热这里只有免费| 99视频自拍| 久热久69| 亭亭五月丁香综合欧美| 丁香五月激情无码视频| 国产精品久久..4399| 99视频这里有精品| 91黄址| 深爱激情网噜噜色| 亚洲综合五月天婷婷丁香| 黑人巨粗进入警花疼哭A片| 九九视屏| 色婷五月丁香久亚洲| 9久国产| 9色婷婷| 亚洲激情在线| 天堂草在线看www| 久9热| www.com色播五月天| 草操网| 欧美影院| 五月Huangsewang| 97精品欧美91久久久久久久| 五月天黄色激情小说| 五月天婷婷激情小说电影| www.婷婷五月.com| 丁香婷婷五月天网站| 丁香六月婷婷综合| 久久婷婷丁香花综合网| 久热这里只有精品3| 天天日天天操心| 免费一区二区三区| 79精品在线视频| 深夜男女福利刺激影院一区完整| 亚洲精品另类| 开心婷婷五月天电影院| 丁香六月婷婷综合| 五月婷婷七月丁香| 另类综合婷婷五月天欧美视频| 99精品成人无码A片观看金桔| 丁香五月香蕉| 激情五月婷婷| 色婷婷色和| 婷婷五月天亚洲图片| 涩五月婷婷| 色婷婷狠狠| www.99久| xxxx久| nvrentiantang av| 激情精品久久| 亚洲、热| 成人片黄网站色大片免费毛片| 色色综合色视频| 色九区| 成人版视频在线观看| 色五月婷婷基地| 色婷婷aV四虎| 99re思思热久久| 婷婷成人av| 婷婷五月噜噜| 婷婷伊人五月天| 激情 婷婷 插| 日韩ww| 天天草天天日| 波多野结衣不卡AV| 久久久五月婷婷| 国产干逼片| 天天色综合网1| 久久久高清| 天天摸夜夜夜| 五月婷婷性爱视频| 婷婷深爱五月| 丁香五月婷婷欧美激情-中文天堂最新版在线观看| 都市激情五月婷婷亚洲| 婷婷激情六月中文| 99免费视频网| 久99精品视频| 久久综合影院 | 激情五月婷婷视频| 亚洲色A| 亚洲综合欧美色丁香婷婷888月图片 | 婷婷久久五月天亚洲欧美国产日韩在线观看 | 人五月天婷婷喷水| 99综合免费视频| 亚洲欧美日韩另类| 天天摸天天透天天舔| 五月婷婷综合影院| 超碰人人操人人干| 激情五月天噢美| 97碰碰碰免费公开在线视频| 激情亚洲婷婷六月| 婷婷不卡基地| 66色在线日韩| 久久婷婷五月天懂色| AV九九| 狠狠插狠狠| 激情婷婷丁香色五月| 99热国内精品| 久久国产性爱A V| www.第四色99| 色色色色色色色色色色色色色97| 婷婷亚洲影院| 亚洲精品国产熟女久久久| 狠婷婷五月| 日本人人草草| 爱射综合| 五月天成人小说网| 久久人人九九| 日本欧美成人片AAAA | 日本久久婷| 综合色天天| 五月婷婷亚洲色图| 五月丁香六月情| 天天舔天天摸视频| 91干视频| 爱超碰性| 婷婷五月综合色拍| 欧美激情xxxXX| 色青五月天| 久久xxxx| 久久美女五月天| 狠狠香婷婷五月| 色综合中文综合网| 成人在线日韩| 色五月婷婷内射| 97人人射| 另类国产欧美视频| 丁香婷婷色五月| 婷婷五月天第四色| 成人AV在线电影| H亚洲| 色五月欧美| 丁香久久| 婷婷成人综合免费视频| 欧美久人人| 香蕉AV福利精品导航| 丁香五月成人婷婷| 天堂婷婷五月色| www.99日本| 五月天丁香啪啪网| 色色色色综合| 色五月播五月| 五月色导航| 超碰精品在线| 丁香五月婷婷激情中文| 91精品久久久久久77777| 成人在线99| 这里只有九九精品| site:hcxsz888.com| 色五月自偷自拍婷婷婷婷| 嫩草AV久久伊人妇女超级A| 亚洲AV网站| 婷婷六月啪啪| 日韩久久这里只有精品| 人人澡天天色天天做| 99久精品视频| 97在线日韩| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 无码婷婷五月天| 五月婷婷黄色| 久久婷婷久久| 亚洲另类AV| WWW.亚洲无码| 日本不卡一区二区三区| 午夜大香蕉| 69久久99精品久久久久婷婷| 色色色免费视频| 六月婷婷狠狠做| 色五月久久成人婷婷| 五月开心婷婷网| 精品亚洲国产成AV人片传媒 | 丁香九月婷婷色| 天天婷婷操| 日本激情ⅩXX免费视频| 五月婷婷激情网| www.henhenl| 色综合视频| 4399欧美另类视频| 色yeye色综合| 热婷婷av| 婷婷酒色网| av婷婷六月丁香社区在线观看| 中国女人内射6XXXXX| www.夜夜操| 99噜噜噜在线播放| 婷婷色综合| 99精品热| 天天日天天舔| 2018国产大陆天天弄| 精品一二三区久久AAA片| 操人无码| 午夜成人片400| 久久小说| 亚洲视频在线网站| 婷婷婷婷午夜| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 激情五月综合网最新| 日本色天堂| 超碰免费大香蕉| 中文字幕在线观看视频www| 超碰chaompinm| 五月丁香美女视频| 丁香六月婷婷综合激情欧美 | 久热99热| 国产99热| 丁香成人五月天| 乱精品一区字幕二区| 超碰人人摸人人操| 奇米色大香蕉| 碰碰操91| 婷婷四色五月| 久久在线视频只有这里有精品| 丁香五月在线视频| 白天AV月月| 婷婷射婷婷舔| 99色综合| 一级性爱大片| 吾爱AV导航| 色婷婷天堂| 五月丁香久久精品在线观看| 激情综合4月| 天天干天天操天天爱| 激情五月婷婷网| 日本一毛片| 99热这里只有精| 久爱综合| 婷婷之玖玖| 五月天色图| 熟女五月天久久综合| 久 久9 9 热 视 频| 丁香五月综合激情啪啪| 99视频自拍| 五月婷婷影视| 9精品视频在线| 这里只有精彩小视频视频网站| 79成人网| 这里只有精彩视频| 亚洲成人在线播放| 欧美婷婷色| 激情亚洲婷婷| 99热国产这里只有| 久久九九热视频| 六月婷婷开心| 丰滿爆乳一区二区三区| 丁香婷婷91在线观看视频| 综合五月天亚洲婷婷| 啄木鸟丝袜美女福利视频 | 激情五月婷婷网| 超碰成人公开| 国产97色在线| 五月天色在线| 婷婷九月激情| 色五月婷婷7777| 久九色| 色婷五月丁香久亚洲| 女人天堂AV| 亚洲亚洲人成综合网络| 69综合在线| 丁香成人综合| 超碰免费99| 9九九久久精品无码专区| 精品激情| 婷婷丁香成人五月天| 天天干电影| 婷婷亚洲久久| 天天操天天操天天操| 激情久久综合| Caoub青青超碰| 加勒比色色| 色九网| 伊人五月天久久| 久久久婷丁香五月| www.minyis.com【JT】实力收量可预付QQ2101460746 | 五月丁香综合久久| 五月丁香久久久久| 丁香五月停停av| 成人五月天色天堂| 色爱99| 丁香五月熟女| 色婷婷深爱五月| 日本99视频| 色婷婷四色| 热99re| 99热这里是精品| www.五月婷婷| 特级西西4444www无码| 国产一二区爆乳_1国产日韩一区二区三-成人AV| 日本久久人人| 亚洲丁香婷婷丁香五月天激情| 五月婷婷综合在线亚洲视频| 亚洲激情综合色站| 91婷婷丁香| 超碰av天堂| 激情五月天激情五月天| 久久综合站| 26UUU精品一区二区c〇m| 九九伊人网| 欧美五月丁香啪啪响视频| 9999久久久久| 综合激情五月婷婷| 狠狠色成人影片| 成人VAV视频在线观看| 婷婷五月丁香六月天亚洲综合| 成人做爰高潮A片免费视频| 久久99这里只有精品| 国产日比| 99re久久| 色综合九九| 五月丁香操婷逼| 五月激情婷婷综合| 婷婷五月综合网| 一级精品999WWW| 香蕉久久六月| 六月丁香综合| 综激情网| 激情av| 婷婷五月播| 色99在线观看| 九九AV| 久久婷婷伊人| 天天成人综合| 狠狠精品干练久久久无码中文字幕 | 91成人性爱视频| 久久久精品99亚洲综合| 婷婷五月av| 五月丁香啪啪啪啪| 色婷婷综合久久|