2、react使用原生js模拟长按操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2、react使用原生js模拟长按操作相关的知识,希望对你有一定的参考价值。
参考技术Atouchstart :手指触摸到一个 DOM 元素时触发。
touchend :手指从一个 DOM 元素上移开时触发。
touchmove :手指在一个 DOM 元素上滑动时触发。
思路是,在触发 touchstart 时设置一个定时器 setInterval(longPress(),500) ,指定时间后执行长按的操作(如500ms),在执行完长按的操作和触发 touchend 之后清除定时器。
这样一来,如果没有超过500ms,手指离开屏幕,触发 touchend ,则 longPress 不会执行。如果时间时间超过500ms,则 longPress 执行一次。
如何在 RN 中模拟原生模块
【中文标题】如何在 RN 中模拟原生模块【英文标题】:How mock the native module in RN 【发布时间】:2020-12-26 16:03:50 【问题描述】:我尝试在 react-native 中模拟模块 NativeModules
。
为避免在每次测试中复制和粘贴,我尝试创建一个“mocks/react-native.js”文件,在其中模拟相关模块。我发现这个教程有帮助,但它不起作用https://altany.github.io/react-native/0.61/jest/mocking/upgrade/2020/01/25/mocking-react-native-0.61-modules-with-jest.html
这是我的模拟文件
import * as ReactNative from 'react-native';
export const NativeModules =
...ReactNative.NativeModules,
SettingsManager:
settings:
AppleLocale: 'en_US',
,
,
;
export const Platform =
...ReactNative.Platform,
OS: 'ios',
Version: 123,
isTesting: true,
select: (objs) => objs.ios,
;
export const keyboardDismiss = jest.fn();
export const Keyboard =
dismiss: keyboardDismiss,
;
export default Object.setPrototypeOf(
NativeModules,
Platform,
Keyboard,
,
ReactNative,
);
这是产生的错误:
TypeError: Cannot read property 'create' of undefined
1 | import StyleSheet from 'react-native';
2 |
> 3 | export default StyleSheet.create(
TypeError: Cannot read property 'get' of undefined
您知道使用模拟文件模拟NativeModules
模块的另一种方法吗?
要么
你知道如何解决这些错误吗?
【问题讨论】:
【参考方案1】:模拟应该定义*
导入,而不是default
。和ES模块*
导出cannot be defined programmatically。
这应该通过使用 CommonJS 模块来完成,而原型继承则不需要这样做:
const ReactNative = require('react-native');
...
module.exports =
...ReactNative,
__esModule: true,
NativeModules,
Platform,
Keyboard,
;
【讨论】:
我已经根据您的示例调整了我的模拟,但出现了这个错误。Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'DevSettings' could not be found. Verify that a module by this name is registered in the native binary.
我不明白怎么解决
没有 mock 是否可行?答案解决了 Jest 模拟的问题,我不能保证 RN 可以使用这些模拟,因为它可能需要对 RN 内部有很好的理解才能以正确的方式模拟它。至于报错,好像很常见,***.com/questions/59713472/…以上是关于2、react使用原生js模拟长按操作的主要内容,如果未能解决你的问题,请参考以下文章