Estoy trabajando en el proyecto create-react-app, cree una función en este proyecto, pero la función de texto de copia no funciona, los problemas se mencionan en la siguiente línea de código. por favor revise el problema...
import React, {useState} from 'react' export default function TextForm(props) { const handleCopy = () => { console.log("I am copy"); let text = document.getElementById("mybox"); text.Select(); navigator.clipborad.writetext(text.value); } const handleOnChange = (event) =>{ // console.log("on change"); setText(event.target.value); } const [text, setText] = useState(''); return ( <> <div className='container'> <h1>{props.heading} </h1> <div className="mb-3"> <textarea className="form-control" value={text} id="myBox" rows="8" onChange={handleOnChange}></textarea> <button className="btn btn-primary mx-2 my-2" onClick={handleCopy}>Copy Text</button> </div> </div> <div className="container my-3"> <h2>Your text summary</h2> <p>{text.split(" ").length} Word and {text.length} Characters</p> <p>{0.008 * text.split(" ").length} Minute Read</p> <h3>Preview</h3> <p>{text}</p> </div> </> ) }FormaTexto.js:16
Uncaught TypeError: Cannot read properties of null (reading 'Select')Hay algunos problemas en su código:
text y no necesita obtenerlo mediante getElementById y Select .writetext no existe en navigator.clipborad . Debe ser writeText (se distingue entre mayúsculas y minúsculas).state en la parte superior del componente. Entonces, mueva const [text, setText] = useState(''); a la parte superior de su componente.text no tiene propiedad de value . Puede acceder a su valor con solo enviar un mensaje de text .Aquí está el código editado:
function TextForm(props) { const [text, setText] = useState(''); const handleCopy = () => { navigator.clipboard.writeText(text); } const handleOnChange = (event) =>{ setText(event.target.value); } return ( <> <div className='container'> <h1>{props.heading} </h1> <div className="mb-3"> <textarea className="form-control" value={text} id="myBox" rows="8" onChange={handleOnChange}></textarea> <button className="btn btn-primary mx-2 my-2" onClick={handleCopy}>Copy Text</button> </div> </div> <div className="container my-3"> <h2>Your text summary</h2> <p>{text.split(" ").length} Word and {text.length} Characters</p> <p>{0.008 * text.split(" ").length} Minute Read</p> <h3>Preview</h3> <p>{text}</p> </div> </> ) }Tiene valor de text , por lo que no necesita esto.
let text = document.getElementById("mybox"); text.Select();Así que tal vez solo hagas esto
navigator.clipborad.writetext(text);