reactjs - ReactJS Hooks UseRef 返回 null
问题描述
我正在使用 react-hook 将样式从 span 元素复制到 input 元素。如果编辑状态变为真,则此组件从跨度切换为输入。但是我想保持跨度内的样式。到目前为止,这不起作用并且 inputEl 总是返回 null。
我愿意接受新的想法来实现这一点。
import React, { useState, useRef, useEffect } from "react";
const Editable = props => {
const [edit, setEdit] = useState(false);
let children = props.children;
const spanEl = useRef(null);
const inputEl = useRef(null);
const handleClick = () => {
setEdit(!edit);
};
useEffect(() => {
inputEl.current.served.style = spanEl.current.style;
}, [inputEl]);
if (edit) {
return <input ref={inputEl} onClick={handleClick} value={children} />;
} else {
return (
<span ref={spanEl} onClick={handleClick}>
{children}
</span>
);
}
};
export default Editable;
解决方案
你得到的错误是运行时错误,因为最初你的条件是错误的,所以它将进入else
块而不是if
块,并且在你的else
块中没有<input />
元素。如您所知,在useEffect
页面加载时运行,因此您不能使用甚至不存在inputEl.current.served.style
的useEffect。
您可以做的一件事是:
<input hidden ref={inputEl} onClick={() => handleClick()} value="value" />
在您的块else
中添加此代码
或inputEl.current.served.style
在您的 ref in 中添加初始值,const inputEl = useRef(null);
而不是在此处添加 null。
你可以参考这里的演示。
推荐阅读
- linux - 如何使用 shell 脚本在文件路径连接中使用用户定义的变量
- c - 存储来自给定文件的数组长度和数组输入的问题,其中第一个整数是第一个数组的长度
- javascript - 使用 Electron 和 React 从目录读取文件名并输出到 JSON 的方法
- c++ - 为什么在向量上使用 std::find() 时会出错?
- java - 如何使用未来
获取 AsyncResult 作为回报? - python - re.findall 没有找到所有,只有一些。这怎么可能?
- selenium - dotnet core C# Selenium 从 chrome 开发者工具网络选项卡获取详细信息?
- amazon-dynamodb - 使用 OR 和 beginWith 的 DynamoDB 查询
- java - 基于 Java 中的标头写入 csv/excel
- html - 为什么
html 的标签不是分段内容,而是