React js 通过单击按钮粘贴先前复制的文本
React js paste a previously copied text by clicking on a button
我有足够长的文本是从另一个站点复制的,我必须确保当用户单击按钮时,文本被获取并复制到 value
变量中。
我尝试使用 getData
,但它不起作用。
你能帮帮我吗?
Link: codesandbox
代码:
import React, { useState, useEffect, useRef } from "react";
import Box from "@mui/material/Box";
import TextField from "@mui/material/TextField";
import Button from "@mui/material/Button";
export default function MultilineTextFields() {
const [value, setValue] = React.useState("");
const ref = useRef(null);
return (
<Box
component="form"
sx={{
"& .MuiTextField-root": { m: 1, width: "25ch" }
}}
noValidate
autoComplete="off"
>
<Button
variant="contained"
color="primary"
onClick={(e) => {
let paste = (e.clipboardData || window.clipboardData).getData("Text");
setValue(paste);
}}
>
Paste
</Button>
<div>
<TextField
ref={ref}
id="outlined-multiline-static"
label="Multiline"
multiline
rows={40}
value={value}
/>
</div>
</Box>
);
}
需要注意的是,这种方法并不完全跨平台。有关兼容性,请参阅 Here。
可以使用剪贴板API,可以这样使用:
navigator.clipboard.readText()
.then(text => {
console.log('Pasted content: ', text);
})
.catch(err => {
console.error('Failed to read clipboard contents: ', err);
});
或使用异步语法:
const text = await navigator.clipboard.readText();
请记住,这会提示用户一个权限请求对话框,因此不可能发生有趣的事情。
如果从控制台调用上述代码将不起作用。它仅在您 运行 活动选项卡中的代码时有效。要 运行 来自控制台的代码,您可以设置超时并快速单击网站 window:
setTimeout(async () => {
const text = await navigator.clipboard.readText();
console.log(text);
}, 2000);
在 Google 开发人员 docs 中阅读有关 API 和用法的更多信息。
你也可能不能在代码沙箱上使用它,因为它是一个沙箱环境。
我有足够长的文本是从另一个站点复制的,我必须确保当用户单击按钮时,文本被获取并复制到 value
变量中。
我尝试使用 getData
,但它不起作用。
你能帮帮我吗?
Link: codesandbox
代码:
import React, { useState, useEffect, useRef } from "react";
import Box from "@mui/material/Box";
import TextField from "@mui/material/TextField";
import Button from "@mui/material/Button";
export default function MultilineTextFields() {
const [value, setValue] = React.useState("");
const ref = useRef(null);
return (
<Box
component="form"
sx={{
"& .MuiTextField-root": { m: 1, width: "25ch" }
}}
noValidate
autoComplete="off"
>
<Button
variant="contained"
color="primary"
onClick={(e) => {
let paste = (e.clipboardData || window.clipboardData).getData("Text");
setValue(paste);
}}
>
Paste
</Button>
<div>
<TextField
ref={ref}
id="outlined-multiline-static"
label="Multiline"
multiline
rows={40}
value={value}
/>
</div>
</Box>
);
}
需要注意的是,这种方法并不完全跨平台。有关兼容性,请参阅 Here。
可以使用剪贴板API,可以这样使用:
navigator.clipboard.readText()
.then(text => {
console.log('Pasted content: ', text);
})
.catch(err => {
console.error('Failed to read clipboard contents: ', err);
});
或使用异步语法:
const text = await navigator.clipboard.readText();
请记住,这会提示用户一个权限请求对话框,因此不可能发生有趣的事情。
如果从控制台调用上述代码将不起作用。它仅在您 运行 活动选项卡中的代码时有效。要 运行 来自控制台的代码,您可以设置超时并快速单击网站 window:
setTimeout(async () => {
const text = await navigator.clipboard.readText();
console.log(text);
}, 2000);
在 Google 开发人员 docs 中阅读有关 API 和用法的更多信息。
你也可能不能在代码沙箱上使用它,因为它是一个沙箱环境。