[facebook/react-native]为ios和android添加剪贴板组件

2024-03-05 563 views
9

为ios和android添加剪贴板组件

    import Clipboard from 'react-native'

    Clipboard.get((content)=>{
          console.log('here is content in clipboard:%s',content)
    });
    var content = 'here is a string';
    Clipboard.set(content);

回答

9

如果 Android 版本的 Pasteboard 正在开发中,请抄送@dmmiller。

7

@satya164我知道,但是你不提供js接口。并且iOS版本没有“get”方法

5

@TanTan-TT 是的,但它被称为Pasteboard而不是Clipboard。该方法可能被称为setString. 我们不应该改变整个 API。

1

@satya164 我改变了API

import Pasteboard from 'react-native'

Pasteboard.getString((content)=>{
      console.log('here is content in pasteboard:%s',content)
});
var content = 'here is a string';
Pasteboard.setString(content);
7

让我们等待@dmmiller

0

通过分析此 Pull 请求的责任信息,我们确定了 @nicklockwood、@vjeux 和 @sahrens 是潜在的审阅者。

3

iOS 粘贴板模块已经存在。为什么要添加 Libraries/Components/Pasteboard/Pasteboard.ios.js?

2

同意@dmmiller。我们正在尝试尽可能地统一 iOS 和 Android API,但我认为没有充分的理由对它们进行不同的命名。

iOS Pasteboard 模块非常新,而且还没有 JS 包装器,所以如果人们认为 JS 文件“Clipboard.js”更好的话,我很乐意将其命名为“Clipboard.js”——稍后我可以重命名 iOS 本机模块。

至于 iOS 上缺少的 get 方法,暂时将该 API 标记为 Android 专用,稍后我们可以添加 iOS 支持。

8

是的,Clipboard在我看来也是一个更好的名字。

0

@dmmiller抱歉,我不明白你的解决方案,你的意思是如果没有用于粘贴板的js包装器,直接使用从RTCPasteboard导出的方法?但在我看来,如果这样做,用户必须导入NativeModule而不是react-native?我认为在 Java 世界中 RTCPasteboard 是一个奇怪的类名

4

@ide @satya164也许我可以将js包装器的名称更改为“Clipboard”,然后用户可以从“react-native”导入它

1

@TanTan-TT 听起来是个好方法。将 JS 文件和 android 类命名为“Clipboard”,将 iOS 类保留为 iOS 中的 Pasteboard,并在 Clipboard.js 文件中执行如下操作:

var RCTClipboard = NativeModules.Clipboard || NativeModules.Pasteboard;

不需要添加 Pasteboard.ios.js 或类似的东西。

5

我们内部确实有一个粘贴板模块,并计划将其开源: https ://gist.github.com/mkonicek/4556908b269919e1bd31

请以此为基础编写您的代码。

我同意其他人的观点,即“剪贴板”对于 Android 和 iOS 来说都是一个更好的名字。请将所有出现的内容替换为您能找到的“粘贴板”,包括字符串常量、Java 类和包名称等。

4

我将在 2015 年 12 月 6 日之前不在办公室。

有任何问题请向金豪耿寻求帮助。

注意:这是对您于 2015 年 12 月 3 日上午 7:10:21 发送的消息“回复:[react-native]为 ios 和 android 添加剪贴板组件 (#4384)”的自动回复。

这是此人离开时您收到的唯一通知。

3

@mkonicek 好的,我会处理的。但我仍然对 js 包装文件有一个建议。基于v0.16的粘贴板,用户必须这样使用该模块

var pasteboard  = require('NativeModules').pasteboard;

但对于其他 API,代码就像

import {ToastAndroid} from 'react-native'

我认为上面的代码比 require('NativeModule') 更正式,它就像一个内部 API。

0

@TanTan-TT 更新了拉取请求。

5

是的,我同意要求 mdule 应该与 ToastAndroid 等其他内容保持一致。

1

@TanTan-TT 更新了拉取请求。

6

@mkonicek 我已经拉取了最新版本的请求(包括在 UIExplore 中添加演示),并且我已经通过了 iOS 和 Android UIExplore 中的测试。但 Travis CI 告诉我有一些错误,

Examples/UIExplorer/ClipboardExample.js:20
 20:    Clipboard,
        ^^^^^^^^^ property `Clipboard`. Property not found in
 23:  } = React;
          ^^^^^ Object.create

但确实有效。我不知道如何处理这些错误,并且我相信有些错误不是由我的代码引起的。但您仍然可以查看代码。谢谢。

6

很抱歉在已经开放很久的 PR 中提出了另一件事,但是我们真的希望方法名称是Clipboard.getClipboardStringandClipboard.setClipboardString吗?就我个人而言,我更喜欢Clipboard.getStringand Clipboard.setString,不需要额外的Clipboard

0

@satya164在js API中,它确实不是“剪贴板”

9

@TanTan-TT Native 中有什么不同的原因吗?

6

如果我们将 Native 方法更改为setStringgetString,我们可以大大简化Clipboard.js文件,

module.exports = require('NativeModules').Clipboard;
3

@satya164 ios 和 Android 都有吗?

9

@TanTan-TT 是的:)

2

@TanTan-TT 更新了拉取请求。

3

@satya164 修复它!

3

@facebook-github-bot Shipit

8

@nicklockwood 谢谢

9

合并这个。我最终对 Java 代码进行了一些调整。

5

再次查看 API,我真的认为getString应该提供错误回调,而不是如果不起作用就默默失败。一旦它落地,你能为此发送一个单独的 PR 吗?

7

@mkonicek 好的。知道了。

7

有人可以为此制作一份文档吗?谢谢!

9

@sunnylqm 我可以写,但我不知道如何在这个网站上写这个。@satya164 你能指导我为剪贴板编写文档吗?

5

他们似乎将doc以某种格式放在组件源中,例如javadoc。

8

@sunnylqm 我知道。但在这种情况下,没有js文件,也没有地方放置jsdoc。

0

@TanTan-TT 您可以在JS文件中编写API。无论如何,为了向后兼容,我们都需要这样做。