reactjs - 使用 props.children 时,在 useLayoutEffect 上未定义 Ref
问题描述
我有一个最小的可重现示例,其中包含一个<Wrapper>
包装<Base>
. 目标是在渲染后立即获得焦点的输入字段。(代码笔)
由于包装器,函数inputRef.current
中未定义useLayoutEffect
。应用程序崩溃。
但是,当省略<Wrapper>
组件时,一切正常。(代码笔 2)
错误代码:
function Wrapper({ children }) {
<div className="wrapper">
{children}
</div>
}
function Base() {
const inputRef = React.useRef();
React.useLayoutEffect(() => {
inputRef.current.focus();
}, []);
return (
<Wrapper>
<input type="text" ref={inputRef} />
</Wrapper>
);
}
编辑:该问题目前无法在 codepen 中重现。这可能是因为 Wrapper 包含来自react-modal的组件
解决方案
Wrapper
没有返回任何东西,所以你最终在页面上什么都没有。解决方法是在Wrapper
.
function Wrapper({ children }) {
return (
<div className="wrapper">
{children}
</div>
);
}
PS,如果你检查开发者控制台,你会看到一个错误提示你渲染时没有返回任何东西。
推荐阅读
- wordpress - WordPress上的重力形式
- wcf - 更改自签名证书会导致通信问题?
- bootstrap-4 - 将选项动态添加到 Bootstrap 可搜索选择
- database - 这个实体关系图正确吗?
- android - Robot Framework Appium 库:获取 ValueError:某些关键字不支持带有前缀“//* [@class”的元素定位器
- solr - 基于函数结果的 Solr faceting
- android - 为什么 Flutter 导入提供程序包不起作用?
- python - 在 Dockerfile 中设置别名不起作用:找不到命令
- python - Python - 在 Dash 回调中重用函数
- ruby-on-rails - 从反应到rails进行api调用后出现错误422