javascript - 从 Array 创建的 React refs 不起作用
问题描述
我正在尝试使用ref
从数组创建的 s 但是当我签入 React Developper Tools 的 Component 选项卡时,ref
传递给input
are always undefined
。我在这里错过了什么?
const MyComponent = () => {
const refs = useMemo(() => Array(2).fill(0).map(i => React.createRef()), []);
const TextInput = ({ name, value, inputRef }) => (
<input
name={name}
value={value}
onChange={updateField()}
ref={inputRef}
/>
)
return (
<TextInput
name="lastname"
value="Nom *"
inputRef={refs[0]}
/>
<TextInput
name="firstname"
label="Prénom *"
inputRef={refs[1]}
/>
)
}
谢谢!
解决方案
如果您有可变数量的 ref,您将需要一个函数样式的 ref,如下所示。
const TextInput = ({
name,
value,
refs
}) => (
<input
name={name}
value={value}
ref={(el) => {
refs.current[name] = el;
}}
/>
);
const MyComponent = () => {
const refs = React.useRef({});
React.useLayoutEffect(() => {
console.log(refs.current);
}, []);
return (
<>
<TextInput name="lastname" value="Nom *" refs={refs} />
<TextInput name="firstname" value="Prénom *" refs={refs} />
</>
);
};
这将记录
{lastname: HTMLInputElement, firstname: HTMLInputElement}
顺便说一句:永远不要嵌套组件——这会导致不必要的重新渲染。
推荐阅读
- python - 如何使用 python 3 读取 csv 文件
- c++ - C++)如何从一个类中使用其他类的方法?
- javascript - 如何使用 JavaScript 或 Node.js 删除 PDF 注释?
- vue.js - Vue js 生成未定义的新表格行数据数组
- google-chrome - ASP.NET Core 3 应用程序不刷新浏览器中的 HTML/CSS 更改
- java - Unicode 字符错误的 java.net.URI 非标准编码
- python - Django 实时更新字段并验证
- bash - 用户无法从 bash 脚本中找到 npm
- reactjs - 用于链式函数调用的 Jest 单元测试
- excel - 找到两个单元格之间的最大值,但不包括单元格