免费国产精品自在自线-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
返回資訊列表
99久视频| 狠狠操狠狠狠| 玖玖色综合色| 亚洲不卡| 色五月天成人| 丁香综合伊人AV| av操B网站| 夜夜夜夜夜操| 奸逼视频| 亚洲视频色色| 欧美色色色色色色色色色色| 9国产在线视频| 射区导航| 中国激情网| 天天插天天射天天干| 天天射影院| 99精品在线| 亚洲色婷婷99一9|| 玖玖五月| 国产一级视频a| 五月婷婷丁香五月婷婷丁香| 五月婷婷手机在线| 日韩一区二区在线播放| 97婷婷狠狠| 男女啪啪做爰高潮无遮挡| 99爱无码| 五区毛片七区毛片| 天天干天天操天天干天天操天天干天天操| 在线色色| 色狠狠综合网| 激情五月天啪啪| 激情五月婷婷| 久久九九99| 夜夜躁爽日日| 色色色综合色| 亚洲VA口| 激情第四色| 亚洲日韩乱码一区二区三区四区 | 蜜臀AV在线观看| 五月婷婷AV| 日日干日日s| 91精品久久久久久久久久久久| 91 九色大美女| 色五月婷婷亚洲| 久久成人精品视频| 99色一| 久久婷婷五月综合色奶水99啪| 操草草草| 五月丁香婷色| 97色色婷婷五月天| 色欲天天综合| 超碰AV在线| 丁香久久久| 91综合视频在线| 黄急一级视频| 丁香五月精品视频| 看婷婷五月天网| 成人中文字幕在线| 色五月首页| 波多野结衣AV无码Porn| 玖玖爱综合网| 色五月婷婷少妇人妻| 久久精品性爱视频,| 色青五月天| 日本久久久97| 色色色天堂网| 天天爽人人综合免费7799| 激情婷婷视频在线| 五月婷婷五月天| 狠狠色大香蕉| 亚洲一级AV在线免费播放| 色天使久久综合| 天海翼中文字幕高| 玖玖婷婷视频| 天天情天天狠天天透| 九九色逼| 99久久综合精品五月天| 婷婷综合av| 日本丰满久久| 久久婷婷资源| 第四色婷婷日本| site:xiongshengzz.com| 丁香九月婷| 婷婷色婷婷亚洲成人| 人人草公开操| 亚洲色无码| 丁香六月成人| 99热这里只有精彩| 99re欧美精品| 91丨九色|PRNY熟妇| 热热99爱爱| 久9视频免费播放| 99热九九在线| 丁香五月婷婷成人色区| 激情五月小说婷婷| 97色色色| 九九re视频在线视频| 99久视频| 日日夜夜狠狠| 99九九热视频| 色久五月| 日本丁香五月| 久草丁香婷婷五月天婷| 五月丁香WWW| 五月花激情| 欧美日韩成人免费在线| 婷婷六月丁香五月图区| 99热精品在线播放| 色婷婷婷婷| 五月婷婷性爱| 日韩AV免费| 色综合色色色色色色综合| 91精品啪| 国产精品18久久久| 91疯狂操操操操| 久久66er久久| 五月天社区| 亚洲操人| 综合久久综合久久| 婷婷丁香成人五月天| 激情婷婷久久| 91精品视频男人的天堂| 99热成人精品| 九九Av| 九九艹女| 亚洲视频丁香网va| 五月丁香久久| 丁香色五月 97干| 大陆肏屄视频| 久久五月丁香伊人青草| 婷婷五月激情图片| 人妻五月天激情开心网| 操逼棍操逼| 激情久久久| 爱操天堂| 激情开心五月亚洲| 亚洲精品久久久久久久久久飞鱼 | 成人综合网站| 日日夜夜狠狠婷婷色| 五月婷婷六月综合| 亚洲视频另类| 人人爽欧美婷婷久久久五月丁香| 337p大胆噜噜噜噜噜91Av| 99九九免费精品| 丁香五月综合在线| 少妇AB又爽又紧无码网站| 欧美日韩国产一区| 9色免费网| 五月花综合| 婷婷久久色| 婷婷色婷婷| 99久精品视频| 欧美日韩成人免费在线| 综合久久影院| 91Chinese在线| 欧美三级黄色片久久| 婷婷五月天资源| www.狠狠操| 亚洲激情亚洲激情| 97在线精品| 五月丁香精品| 五月色婷婷综合| 色婷婷四色| 亚洲 五月 婷婷 成人| 丁香六月激情综合| 人与禽A片啪啪| 婷五月丁香俺| 性爱视频久久| 丁香网五月网| 久久国产高潮白浆免费观看99| 激情五月com| 色婷婷久久| 色情五月天视频网| 激情五月婷婷| 中文字幕 久久9999| 中字幕视频在线永久在线观看免费| 久久久er热| 免费看欧美成人A片无码| 婷婷,五月天,丁香,第一| 亚洲综合久| www.久久99热地址发布| 五月亭亭直播| 综合网五月天123| AV成人在线网站| 深爱五月天婷综合| 免费啪啪啪网站| 六月综合在线| 国产成人+综合亚洲+天堂| 五月天啪啪| 日韩欧美五月丁综合| 操碰97| 欧日美女Va| 欧美性猛交 XXXX 乱大交| 丁香五月网络网络| 色yeye欧美| 九九热免费| 九九www| 99热这里都是精品| 色五月婷婷视频| 成人 AV播放| xx人人xx| 五月丁香婷婷无码A∨| 激情婷婷色小说| 内射干少妇亚洲69XXX| 婷婷五月天首页| 一区二区三区四区牛| 亚洲成人av在线| 午夜亚洲国产精品av一区二区| 4399成人黄A片| 五月丁香六月香综合激情| 99人人操人人操人人精| 色香蕉婷婷| 激情亭亭五月| 精品,99| 97碰| 久久的爱大香蕉| 激情丁香五月婷婷| 超碰人人超碰| 婷婷五月婷婷| 在线可以看的av网址| 婷婷伊人久久| 五月丁香综合成人社区| 丁香六月激情蜜桃| 婷婷综合五月| 亚州婷婷五月激情综合| 大地9中文在线观看免费高清| 思思热在线| 色五月之第四色| #NAME?| 综合网色| 国产无人区大片| 五月丁香六月婷婷免费视频| 99re这里只有精品国产99| 99热久久日本| 97成人视频| WWW久| 三级毛片7979| 一本狠婷婷综合| 五月天成人综合| 色色色com| 国产综合色婷婷精品久久| 中出内射的人妻视频| 婷婷综合在线| 婷婷伊人久久| 色婷婷久久综合久色综| 99热69| 99综合99| 91打屁股免费看| 亚洲综合色色| 色婷婷综合影院| 五月婷婷深爱六月| 天天肏天天插| 欧洲日韩一区二区三区| 激情久久五月网| 五月丁香综合啪啪| 九九精品网站| 丁香婷婷激情综合五月激情| 欧美日韩99| 婷婷内射视频在线| 亚洲成人在线免费| 成人短视频在线| 天天日日夜夜爽。| 99这里只有精| 日婷婷久久开心| 精品一区二区三区木瓜| 婷婷五月天免费视频在线观看| 亚洲天堂亚洲色色色| 99精品热视频只有精品10| 久久婷婷网站| 色色热99| 六月婷婷影院| 五月丁香综合在线| 大香蕉久久久久| 欧美六月| 色五月激情五月| 丰满少妇猛烈A片免费看观看| 久久激情视频| 亚州成人综合在线| 色五月婷婷综合| 色情五月停停丁香| 色你久久| 夜精品无码A片一区二区蜜桃| 色激情五月天| 天天操天天国产三级片处女学生妹| 丁香五月婷综合| 久婷婷色| 婷婷五月天天| a久久| 亚洲网视屏| 色综合五月天| 久久无意婷婷| 91美女被操| 午夜色色色极品视频| 五月天播播综合| 丁香欧美| 99性视频| www.色多多婷| 99re免费精品视频| 开心五月婷婷激情网| 久久99久久99精品免观看软件| 五月综合激情图片| 色综合五月天| 亚洲经典三级| 婷婷射综合| 99免费热视频在线| 一本到不卡高清DVD| 91在线操| 思思热热久久| 婷婷五月六月| 9色免费网| 久久久99久久| 婷婷五月天激情基地| 99色热视频| 国产午夜精品AV一区二区麻豆| 91VIP在线观看| 婷婷爱爱蜜臀天天操| 亚洲激情 久久| www.五月天激情| 五月天综合久久| 亚洲精品无AMM毛片| 激情丁香久久久久久| 丁香五月亚洲AV| 五月综合缴情网| 欧美色99| 婷婷天天色| 综合五月婷婷| 日本在线视频播放91| 久久九九99字幕| 性热视频99精品| 欧美日本韩国亚洲| 五月婷婷深深爱爱| 久久激情五月| 亚洲性视频| 亚洲女婷婷五月基地综合久久久| 色五月婷婷影院| 五月天大香蕉AV| 五月丁香拍拍激情综合| 婷婷五月丁香香蕉| 99婷婷国产最新视频| 都市激情小说婷婷| 亚洲综合色网| 蜜臀A∨在线水帘洞| 婷婷日欧美在线观看| 狠狠干五月| 亚洲婷婷在线播放十月| 91色五月| 欧日韩成人| 终合激情网| 午夜不卡久久精品无码免费| 超级碰碰碰97免费| 五月天丁香久久| 五月天黄色激情小说| 五月丁香啪啪| WWW,激情五月天,COM| 99热只有| 密乳Va| 婷婷五月天日本无码| 亚洲精品视频在线播放| sesesesezonghe| 久久久无码精品成人A片小说 | 亚洲精品无码一区二区| 久色视频首页| 一级片操逼视频| 综合激情五月丁香| 九久久九精品视频| 婷婷五月天在线观看免费 | 99re热视频这里只有综合亚洲| 五月天婷婷色| 中文精品在| 九九综合| 久久久人妻人伦| 五月丁香黄色视频| 欧美成人无码一区二区三区| 日本人妻伦在线中文字幕| 久久黄色免费视频| 91色色五月天| 这里只有精品在线看| 亚洲电影在线观看| 玖玖资源站中文| 婷婷伊人视婷婷婷| 五月天综合激情网| av在线超清中文| www色色com| WWW.五月天9999| 精品一二三区久久AAA片| 色情·com| 野战J办公桌椅H| 亚洲精品久久久久久久久久吃药| 色色九区| 超碰在线看| 婷婷婷五月天最新综合你懂的| 丁香六月成人| 日韩 中文 欧美| 婷婷综合久久| 久久涩视频| 婷婷五月天无码| 香蕉婷婷色五月| 丁香五月天网站| 色频玖玖五月天| 九九日伊人| 深爱五月婷| 99乱视频| ..真实国产乱子伦对白在线_欧| 噜噜噜噜噜色| 大香蕉婷婷五月| 色色色色色色网| 国产淫熟妇| 色色色五月天激情资源| 午夜天堂啪啪| 视频一二区| 色色永久| 五月丁香六月激情综合| 69天堂99| 开心婷婷五月| 亚洲中文乱字字幕在线永久| 五月婷庭丁香在线| 91色综合网| 国产看真人毛片爱做A片| 天天日天天草| 亚洲中文乱字字幕线在永久| 九九99久久| yw国产AV| 国产精品99久久久久久久女警| 五月婷婷色激情| 二色av| 91嫩草国产线观看亚洲一区二区| 99性视频| 六月婷婷五月丁香| www.开心激情| 丁香五月成人论坛| 色情五月综合婷婷| 激情五月丁香六月综合AVXXXX| 中文幕无线码中文字蜜桃| 丁香五月婷婷大香蕉| 久久五月婷综合网| 99色激| 五月天色站| 欧美交换配乱吟粗大25P| 五月天婷婷久久| 色五月五月丁香| 日韩成人AV在线播放| 在线理论片| 久久婷婷色色| 91人操人人人操人| 激情文学五月丁香六月婷婷| 六月丁香五月亭亭| 日韩欧美一区二区三区四区| 91热99| 色一情一乱一乱一区9| 欧美情色电影一区二区| 激情第四色| 丁香激情久久| 中文字幕永久免费| 思思热久久艹| 色狠狠综合网| 五月丁香婷婷色色色| 亚洲成人人人操| 丁香六月毛片| 婷婷亚洲在线| 欧美综合激情五月天| 人人舔人人色人人高潮| 99热精品网| 狠狠做五月| 日韩啪啪视频| 看黄的网站18禁| 黄色三级日本| 开心六月婷| 婷婷久久网| 色五月成人| 99福利导航| 黄色一级影片| 丁香五月婷婷AV| 五月天丁香婷| 淫视馆aV二区一区| 五月天色婷婷激情综合| 久久五月丁香综合17C| 十月丁香婷婷| 五月婷六月丁| 婷婷午夜天| 婷婷五月天免费视频| 日本操B视频| 婷婷五月丁香综合激情| 99免费热视频在线| 精品久久人妻| av操逼网| 亚洲第二AV| 色色色色色色色色色色色色色五月天| 人妻视频在线| 噜综合| 天天色综合色| 婷婷五月天激情在线| 婷婷五月天久久| 日韩99视频| 亚洲操人| 五月伊人91| 在线综合91| 2020日日干| 67194国产| 婷婷天天舔| 综合五月天婷婷色| 婷婷综合精品| 91无码一区人妻A片蜜| 激情文学 综合 九月| 色五月色图| 超碰三级秋霞| 婷婷六月丁香欧美视频在线| 99热亚洲精品| 丁香五月天日韩无码| 大香蕉伊人爱在线| ji'qing'luan'ren'lun| 六月丁香激情| 疯狂做受XXXX高潮A片动画| 五月桃花网综合| 亚洲色色五月天| 九九国产精视频| 天天碰天天插天天操| 久久精品性爱| 99精品偷自拍| 日本色天堂| 甈吧vv| 国产精品色婷婷久久久精品| 五月综合视频| 非洲一级AV| 色婷婷婷av| 五月婷婷婷婷网| 99啪啪| 亚洲综合色成丁香五月色| 97热在线精品| 五月丁香激情婷婷综合| 五月亭亭开心网| Www.se.久久| 亚洲成人色五月婷婷综合| 99A片| 亚洲精品无码一区二区| 亚洲av免费在线| 久久视频九九视频| 91欧美| 超碰在线中文字幕| 日日日日操| av九九| 久久久久久久久99精品| 激情五月天伊人影院| 99操碰| 九九www| 亚州日本欧州韩美高青高潮一| 五月婷婷欧美| 丁香六月婷婷色播| 天天草比天天爽| www.五月天| 91超碰在线观看| 激情五月婷婷网| 黄桃AV无码免费一区二区三区| 亚洲AV成人片无码网站| 日韩欧美成人片| 狠狠爱丁香婷| www色中色综合| 五月综合激情婷婷六月色窝| 婷婷五月天堂网| 五月丁香久人妻中文| 青青操日本摸摸看看| 婷婷五日b| www,天天干| 丁香五月婷婷AV| 色综合av超碰| 中国激情网| 超碰婷婷色| 婷婷丁香五另类网站| 熟女激情五月天| 丁香五月区| 色色热| 婷婷第一页| 99热这里只| 麻豆忘忧草午夜| 五月丁香黄色| 久久婷婷五月综合色和| 激情亚洲网| 亚洲天堂玖玖| 99精品在线观看视频| 婷婷五月激情综合啪啪| 丁香五月天堂网| 婷婷色六月| 五月丁香成人小说| 五月丁香啪啪综合网| 91操在线视频| 五月色综合| 色五月AV| 夜夜天天天天天干天天爽| 国产精品久久久久久久久久久久| 狠狠色激情综合| 日本在线播放97| 五月色天情| 婷婷九月在线| 日日天天干| site:picc-up.com| 男女啪啪视频久 9| 婷婷深爱五月| 九月丁香婷婷| av中文网| 4438激情网| 99视频这里只有免费精品| 内射爽无广熟女亚洲| 婷婷丁香激情五月天色色| 99精品综合在线| 丁香六月激情综合| 色情五月天小说| 国产日韩精品SUV| 欧美日韩aaaa| 翔田千里 50岁 无码| 五月婷婷六月激情| 婷婷十月丁香| 色玖玖综合网| 婷婷五月天99综合网站| 97热精品| 99热这里只有精品13| 九九美女视频| 激情五月综合婷婷| 天天插天天操| 久久黄A片| 深夜婷婷 丁香| 成年人最刺激的综合网| 色久婷婷网| 色婷婷影音| 天天日,天天干,天天操| 丁香五月亚洲| 婷婷欧美激情综合| 密视AV综合在线| 思思99热| 天天搞天天色综合| 开心五月婷| 亚洲综合久| 91九色偷拍| 草草视频91| 成人综合伍月天| 操操碰| 婷婷五月激情综合啪啪| 99riav 亚洲| 國語久久婷| 99热在线观看免费| 日韩一区二区在线播放| 久久婷婷人人| 婷婷成人综合免费视频| 猫咪伊人久久| 天堂在线婷婷| 97色 五月天丁香| 欧美日综合| 激情五月天com| 超碰renrenai| 中文精品久久久久人妻不| www,色综合| 婷婷五月丁香五月基地| 狠狠干,狠狠操| 亚洲综合另类| 久久精品视频在这里有| 台湾佬天天日丁香婷婷五月天 | 色久综合天天做视频| 激情五月丁香婷婷夜夜操| 六月婷色| 大香婷婷| av在线不卡播放| www,99热在线观看| 丰满少妇乱A片无码| 可以看的AV| 日本三久久| 日狠狠| 婷婷五月激情在线视频| 99九九精品视频| 色综合久久天天综合网 | 在线视频另类| 99er热精品视频| 九久久婷婷| 搡BBBB搡BBB搡18| www久久久| 久久这里只有精品8| 99re最新地址| 五月丁香婷中文字幕| 五月开心婷婷网| www..999热久| 色噜噜97视频在线观看| 2017狠狠干| 亚洲色色五月天| 色色日本欧美| 亚洲一区国产传媒| 噜噜噜狠狠色综| 综合久久综合久久| 九九久久99| 99re6热在线精品视频播放速度| 丁香五月天黄色片| 丁香六月啪啪| 久热这里有精品视频| 人妻操逼| 婷婷射图五月天| 天天天操天天天日| 开心激情站| 99热综合在线| 婷婷五月激情小说| 熟妇内谢69XXXXXA片| 欧美69久成人做爰视频| 91熟妇大香蕉| 婷婷五月丁香91| 色五月涩涩婷婷| 99热精品在线观看| 亚洲色在线观看| 激情五月婷婷| 丁香五月天大香蕉啪啪| 成人一区在线观看| 97操操操| 欧美五月丁香在线观看| 激情婷婷色五月| 久久久无码精品成人A片小说 | 色婷婷久久| 婷婷中文字幕| 色九月丁香婷婷蜜桃在线观看| 日韩无码人妻一区二区| AV中文在线| 婷婷六月久久| 大香蕉伊人爱在线| 亚洲综合另类| 婷婷久久婷婷色五月| 久久五月丁香婷婷| 午夜性爱影视一区77| 午夜色丁香| 综合五月婷婷| 中国无码av| 97碰碰碰| 天天开心AV色综合婷婷五月天| 色欲一二三| 国产这里只有精品| 综合久久综合五月天婷婷| 人妻AV在线观看| 五月丁香好婷婷A片网 | 天天干一干| 青青草99热久久精品国| 九九综合精品| 欧美丁香五月| 1024亚洲无码| 操久久网| 亚洲狠狠干| 亚洲无码另类| 婷婷激情五月天亚洲综合| 婷婷五月天丁香社区| 久久久国产精品黄毛片| 一区二区免费看| 五月丁香婷婷婷婷综合网| 天天干天天拍| 九九精品免费视频99| 久久性操| 噜噜精品| 久久9热好| 丁香婷婷网| 婷婷五月天在线观看免费| 99热这里只有精品在线| 伊人9草在线观看| 玖玖九九99| 深夜男女福利刺激影院一区完整| 极品少妇婷婷五月| 美女100%露全身无挡网站| 日韩婷婷| 九九热re99re6在线精品| 国产精品激情五月天色婷婷| 北京熟妇搡BBBB搡BBBB| 亚洲免费看片| 玖玖五月| 五月婷婷色啪| 99精色| 一区二区三区四日本| 五月丁香美女| 九色激情网| 操一操插一插| 国产日韩精品SUV| 免费AAAAA网| 色五月色五天色情网| 婷婷五月天大香蕉| 韩国天天婷婷| 日韩啪啪自拍| 五月网在线| 五月四色激情| 久久人妻情侣| 成人.在线日韩| 六月婷婷狠狠色在线观看| 99热66| 国产99热在线看| 99无码黄色视频| 色色吧综合| 伊人久久婷婷| 天天日天天做天天舔| 99久在线精品99re8热| 嫩草视频在线观看| 91操人视频| 婷婷五月av| 午夜婷婷| 五月婷婷激情四季| 激情五月天网站| 色五月开心五月激情五月| 激情99| 99久久思思| 久cao香蕉影院| 五月天激情综合10p| 99re资源在线视频导航| 婷婷基地爱| 成人AV综合在线| 激情五月综合网| 99干日本| 丁香五月av| 五月天婷婷在线观看精品男人| 99热在线观看| 武汉美女啪啪视频免费一级片| 操草草草| www.91婷婷| 婷婷久久久| 五月丁了香蕉综合| 国产欧美日韩综合精品一区二区| 亚洲综合色丁香五月天| 激情五月最新网址| 婷婷五月丁香色综合| 99激情在线| 香蕉久久国产AV一区二区| 伊人六月无码视频| 无码人妻一区二区一牛影视| 久久超视频| 久久激情视频99| 99国产精品白浆在线观看免费 | 182.t午在线观看| 99免费在线视频| 久久婷婷色| 日本啪啪视频HD| 欧美婷婷成人| 丁香无月在线观看| 久cao香蕉影院| 99re在线视频| 五月丁香综合伦理片| 97在线干| 婷婷激情五月综合| 狠狠做深爱婷婷久久综合一区| 久久99操| 人五月天婷婷喷水| 狠狠香蕉| 一级二级香港秋霞欧美欧美秋霞| 久久久久亚洲AV无码网影音先锋| 精品无码久久久久久久久 | av大香蕉| 热热久久99| 99re这里只有精品99| av在线免费播放观看| 五月天婷婷基地| 开心色播色五月婷婷| 色婷婷五月综合在线| 大战熟女丰满人妻AV| 久色大| 99热青青草原| 99热99色| 五月情涩综合婷婷| 亚洲人妻av伦理| 丁香五月婷婷五月天| 日日婷婷不卡| 欧美六月| 永久热91| www.色多多婷| 久久精品性爱| 色婷婷久久| Jh7Uf088VHafNm| 亚洲色啪| 五月丁香六月色| 五月婷护士| 91狠狠综合久久| 欧美日韩成人在线观看| www.夜夜.com| 色婷婷婷综合五月天| 久久五月网| 成人AV网站在线| 色狠狠色综合久久久绯色aⅴ影视| 亚洲有码在线视频| 国产精品18久久久| 99爱爱| 色五月丁香五月| 99热这里只有精品免费| 欧美激情-区二区三区| peg 2区三区四区的| 丁香五月婷婷激情网| 激情五月天色婷婷综合| av一区二区电影免费在线观看| 成人无码髙潮喷水A片| 五月婷婷激情久久| 色婷婷五月色| 日韩黄色电影| 六月综合婷婷开心伊人| 五月丁香六月婷婷亚洲视频| 思思热在线精品视频网站| 丁香六月 婷婷六月| 大香蕉手机视频| 97视频91| 五月丁香六月香香蕉| 激情综合在线观看| 久久99精品久久久久子伦| 五月综合丁| 久婷自拍视频| 日韩操女| 无码yw| 大香蕉久久草| 9久热在线视频精品| 大香蕉久久婷婷| 欧美精品久| 激情五月天99色| 操逼巨乳91| 激情爱爱网站超大免费| 亚洲婷婷激情综合激情999精品| 色五月色情| AV免费在线网站| 就去色色五月丁香婷婷久久久| 国产一级黄色影片,| 亚洲精品第一国产综合亚AV | 九月婷婷色色| 91九色精品女同系列| 人妻人人操| 婷婷免费精品视频| 日日噜噜久久婷婷五月天 | 91碰碰视频| 五月丁香黄色视频| 国产成人亚洲综合A∨婷婷| 这里只有精品免费视频| 婷婷伊人网| 四LLL少妇BBBB槡BBBB| 亚洲综合网在线| 色婷婷五月丁香色| 亚洲av无码精品色午夜| 日韩成人AV在线| 国产99美少妇| 婷婷五月天论坛| www.minyis.com【JT】实力收量可预付QQ2101460746 | www开心激情网| 2025年最新亚洲在线欧美| 久久免片| 色色色五月婷婷| 久久久天堂国产精品女人| 超碰日韩成人| 亚洲无码黄色| 永久的网站AAAA| 久热最新视频| 五月丁香啪啪网| 九九九九这里只有精品| 久久AV无码精品人妻系列试探| 亚洲色区17| 五月激情综合网| 五月天婷婷网站| 色五月丁香五月天| 色色色欧美| AV中文网| 亚洲综合视频网| 五月天婷婷青青| 婷婷五月情| 99亚洲精品| 国产在线网址1| 色婷婷免费观看| 色婷婷丁香五月丁香| 婷婷五月天狠狠色| 五月丁香色色网| 七七久久婷婷| 五月天激情黄色小说在线观看| 日日操人人操| 午夜色婷婷| 婷婷五月丁香基| 丁香婷婷六月天| 中文字幕性爱丰满| 亚洲愉拍99热成人精品| 一二线视频 另类| 黄网免费看| www.ppypp| 亚洲激情五月| 激情国产五月| 97色婷婷| 丁香五月激情五月| 综合色、色综合| 天天色播| 五月天播播中文字幕| 乱精品一区字幕二区| 色色丁香婷婷| 夜夜躁爽日日| 丁香网五月天| 激情婷婷五月久久| 九九热最新| 碰99在线| 久久AAAA片一区二区| 成人在线综合| 亚洲一二三网| 色天天久婷婷| 这里只有精品1| 9久久精品视频| 天天干天天色天天干| 婷婷色婷婷| 日本色99| 中文av网| 婷婷六久久| 色色丁香五月婷婷| 狠狠色狠狠操| 丁香五月六月综合激情| 国产在线aaa片一区二区99| 婷婷99视频精品| 色婷婷综合视频| 全部老头和老太XXXXX| 日本精品在线噜噜噜| 夜色综合网| 久久久潮喷-久久久九九-成人AV| 婷婷丁香久久五月综合| 日日夜夜天天综合| 久久狠狠干| 国产激情综合五月久久| 99精品久久久久久| 99久久综合网| 亚洲色色色| 婷五月丁香俺| 婷婷六月综合激情| 久久久久9| 亚洲第一成人无码A片| 九九色播五月丁香| 久久这里只有精品99| 久热在线观看视频9| 永久AⅤ1| 人人摸人人干| 亚洲国产色色| 婷婷中文综合网| 人人人人人人人草| 六月婷综合| 欧美激情综合色综合色| www.99精品日操伊人乱碰在线| 思思热再线视频| 免费91久久精品| 久久婷婷五月综合色和| 俺去婷婷 丁香| 欧美这里只有精品| 色香久久| 久久xxxx| 色五月婷婷天天干| 最近中文字幕2019视频1| 婷婷丁香五月精品| 丁香狠狠干| 思思精品热在线| 久久狠婷婷| 久久久性爱视频| 99啪| 97综合在线| 久久草大香蕉| 97丁香花五月天激情小说| 熟妇人妻中文字幕无码老熟妇 | 五月丁香六月婷婷色日| 色天堂在线| 丁香色五月 97干| 只有精品在线观看| 疯狂做受XXXX高潮A片动画| 五月天婷婷色小说| 午夜九九九九九九| 另类A片| 欧美又粗又大一区二区在线观看| 日日影院 | 丁香五月色欲| 色99日韩| 国产69久久久欧美黑人A片| 九九热视频思思| 亚洲熟女乱色综合亚洲网站| AV操操操| 色欲资源网| 综合性爱网| 九九热精品| 深情五月天| 99ri视频| 五月天色软件| 欧洲不卡视频| 六月丁香综合网| 久久久久婷| 激情久久综合| 26uuuavcom| 亚洲午夜Av| 五月丁香色情| 久久性爰视频这里只有精品| 色停停影院五月天| 91操人| 色色五月婷婷丁香| 99热最新| 九月色婷婷婷| 99这里只有精品|v| 色五婷婷| 五月婷婷丁香啪啪| 9 1 A v久久久| 91chinese在线| 九九热这里只有精品6| 丁香五月六月久久综合| 久久人视频| 日本三级中国三级99人妇网站| 婷婷丁香18| 丁香亭亭久久| 色综合香蕉视频| 免费观看全黄做爰的视频| 五月婷婷六月情| 色久在| 热99精品视频| 激情五月婷婷综合秋霞| 激情九月天天天天婷婷| 欧美激情五月天| 婷婷久久丁香五月| 激情六月婷| 综合99在线| 成人av在线网站| 亚洲人成网站999久久久综合| 开心五月激情网| 五月婷婷激情| 婷婷五月天激情五月天深爱五月天| 操操操操操操婷婷五月天| 日本99婷婷| 国产3p露脸普通话对白| 91超级碰| 狠狠狠狠狠干| 6080av| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 色五月在线观看| 涩涩五月天| 激情九九综合网| sS丁香五月婷婷| 亚洲综合五月天婷婷丁香| 31色区视频免费看| 性爱综合网| 五月天狠狠| 成人在线不卡| 丁香婷婷性久久| 婷婷五月激情在线视频| 99热精品9| 色婷婷深爱五月| 99在线观看视频免费| aa久久| 久9精品| 五月丁香亭亭A片| 久草热8精品视频在线观看| 五月天激情四射| 日韩色色视频| 97碰免费视频在线| 色丁香五月婷婷| 五月丁香色婷婷| 欧美中文五月天| 六月丁香五月天| 五月花激情| 99色色色色| 五月丁香婷婷狠狠操| 人人插操| 伊久大香蕉| 欧美97超碰| 婷婷桃色网| 热久久这里只有三级视频| 亚洲成人丁香花| 噜噜五月天综合| 97在线视频 欧美| 97狠狠碰| 极品另类| 黄网网站在线播放| 精品激情| 婷婷五六月丁香| 色欲丁香久久| 婷婷涩五月天综合| 婷婷六月五月天综合| 51avj视频大全| 日本色综合| 久久婷婷综| 看片视频在线免费日产在线看| 婷婷操逼| 丁香婷婷天堂| 在线综合啪| 碰碰人人漕| 五月丁香婷婷色色| 狠狠艹狠狠艹| 天天艹天天色| 婷婷五月天激情文学| 九九热99熟女| 噜噜视频| 欧美情色一区| 九九久久污| 99九九99九九九视频精彩| 这里只有精品日韩| 99色丁香婷婷综合网| 激情丁香六月| 欧美 日韩 成人 在线| 婷婷亚洲天堂| 伊人婷婷99热精品| 99色| 六月丁香婷婷拍拍| 久久婷婷婷婷伊人| 日本色五月婷婷| 久久99网| 伊人99久久| 五月 激情视频| 激情五月图| 久久少妇视频| 亚洲九九夜夜| 婷婷综合中文字幕| 91porn一起草| 国产va在线视频| 丁香五月婷婷骚视屏| 99玖玖在线视频| 夫妇交换刺激做爰| 色综合香蕉| 99久久a线观| 色播播婷婷| 亚洲va综合va国产va中文| 欧美日韩国产成人在线| 色婷婷丁香五月| 99免费视频在线观看爱| 91爱啪啪| 成人 AV播放| 秋霞三级色戒| 激情五月婷婷视频一区二区三区| www.99热| 爆乳熟女一区二区三区爆乳| 开心深爱激情网| 97狠狠碰| 五月永久激情| 色五月婷婷色| 超碰在线资源| 精品人妻午夜一区二区三区四区 | 国产成人AV在线播放| 亚洲日韩乱码一区二区三区四区| 哇嘎成人久久| www 五月天 com| 五月天激情影院| 亚洲视频在线网| 热久久99视频| 91婷婷色五月| 五月丁香亚州综合网| 26UUU成人网| 日韩久热| 久久99久久久久久久噜噜| 九色视频这里只有精品| 色五月婷婷综合| 99久久视频| 天天干com| 国产99久久久国产精品免费看| 1024手机在线观看看片_日韩精品| 这里只有精彩亚洲视频推荐| 五月激情影院| 99re这里只有精品99| 色色色在线观看| 色yeye欧美| 五月激情黄色小说| 99无码视频| 婷婷五月小说色综合| 五月婷婷丁香综合| 欧美日韩五月婷婷| 人人噜天天上| 亚洲综合色成丁香五月色| 丁香五月天人体| 女人天堂AV| 丁香五月激情婷婷视频| 色综合综合色| 综合激情在线| 五月丁香久人妻中文| 伊人综合婷婷| 婷香五月激情视频| 99情色五月天| 日韩欧美一级大黄网站| 亚洲综合网激情小说| 激情五月小说婷婷| 久久久久婷婷| 成人电影一区| 亚洲操人| 99色亚洲| 婷婷五月丁香综合| 91久久久久久久久久久| 六月丁香啪啪啪| 99综合| 天天做天天要天天爱| 天天插天天插| 狠狠做五月婷婷|