Tig*_*ran 13 typescript reactjs react-hooks
我在 TypeScript 中遇到了 useRef 的问题。
\n我想输入它,但收到错误,如下所示:
\n
\n我的容器组件是:
const HeaderContainer: React.FC = () => {\n const addressElement = useRef<HTMLInputElement | undefined>();\n \n const handleCopy = useCallback(() => {\n if (addressElement.current !== undefined) {\n addressElement.current.select();\n document.execCommand("copy");\n }\n }, [addressElement]);\n return <HeaderUI\n addressElement={addressElement}\n handleCopy={handleCopy} />\n}\nRun Code Online (Sandbox Code Playgroud)\nUI 组件是:
\ninterface IProps {\n handleCopy: (event: React.MouseEvent) => void,\n addressElement: React.MutableRefObject<HTMLInputElement | undefined>,\n}\nconst HeaderUI: React.FC<IProps> = ({\n handleCopy, addressElement\n }) => {\nreturn <div className={classes.Header}>\n <div className={classes["Header-Section"]}>\n <span className={classes["Section-Title"]}>\xd0\x9f\xd0\xb5\xd1\x80\xd1\x81\xd0\xbe\xd0\xbd\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb0\xd0\xb4\xd1\x80\xd0\xb5\xd1\x81 \xd0\xba\xd0\xbe\xd1\x88\xd0\xb5\xd0\xbb\xd1\x8c\xd0\xba\xd0\xb0:</span>\n {address && <input\n type="text"\n className={classes["Section-Value"]}\n ref={addressElement}\n value={address}\n readOnly/>}\n </div>\n <CopyLinkButtonContainer onClick={handleCopy}/>\n </div>;\n}\nRun Code Online (Sandbox Code Playgroud)\n你能帮忙解决这个问题吗?
\n谢谢。
\n小智 11
只需像这样在括号内传递 null 即可。
const addressElement = useRef<HTMLInputElement>(null);
Run Code Online (Sandbox Code Playgroud)
Ben*_*ams 10
错误的最后一行是您的解决方案:您useRef期望的类型
HTMLInputElement | null
但你正在设置类型
HTMLInputElement | undefined
只需将您的类型更改null为undefined:
const addressElement = useRef<HTMLInputElement | null>();
{... addressElement: React.MutableRefObject<HTMLInputElement | null>, ...}
Run Code Online (Sandbox Code Playgroud)
并将您的支票更改为:
if (addressElement.current !== null) {
addressElement 的类型设置应该为 null 而不是 undefined。
\n而且,命名和传递 ref 的更好设计是......只需使用 ref 即可。
\n<HeaderUI\n ref={addressElement}\n handleCopy={handleCopy} />\nRun Code Online (Sandbox Code Playgroud)\n然后...
\nconst HeaderUI: React.FC<IProps> = ({\n handleCopy, addressElement, ref\n }) => {\nreturn <div className={classes.Header}>\n <div className={classes["Header-Section"]}>\n <span className={classes["Section-Title"]}>\xd0\x9f\xd0\xb5\xd1\x80\xd1\x81\xd0\xbe\xd0\xbd\xd0\xb0\xd0\xbb\xd1\x8c\xd0\xbd\xd1\x8b\xd0\xb9 \xd0\xb0\xd0\xb4\xd1\x80\xd0\xb5\xd1\x81 \xd0\xba\xd0\xbe\xd1\x88\xd0\xb5\xd0\xbb\xd1\x8c\xd0\xba\xd0\xb0:</span>\n {address && <input\n type="text"\n className={classes["Section-Value"]}\n ref={ref}\n value={address}\n readOnly/>}\n </div>\n <CopyLinkButtonContainer onClick={handleCopy}/>\n </div>;\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
18523 次 |
| 最近记录: |