【发布时间】:2021-02-19 22:36:39
【问题描述】:
我看到 React.forwardRef 似乎是从反应文档中将 ref 传递给子功能组件的认可方式:
const FancyButton = React.forwardRef((props, ref) => (
<button ref={ref} className="FancyButton">
{props.children}
</button>
));
// You can now get a ref directly to the DOM button:
const ref = React.createRef();
<FancyButton ref={ref}>Click me!</FancyButton>;
但是,与简单地传递自定义道具相比,这样做的优势是什么?:
const FancyButton = ({ innerRef }) => (
<button ref={innerRef} className="FancyButton">
{props.children}
</button>
));
const ref = React.createRef();
<FancyButton innerRef={ref}>Click me!</FancyButton>;
我能想到的唯一优势可能是为 refs 提供一致的 api,但还有其他优势吗?传递自定义道具是否会在渲染时影响差异并导致额外的渲染,肯定不会因为 ref 在 current 字段中存储为可变状态?
例如,假设您想传递多个 ref(这可能表明代码有异味,但仍然如此),那么我能看到的唯一解决方案就是使用 customRef 道具。
我想我的问题是使用 forwardRef 而不是自定义道具有什么价值?
【问题讨论】:
标签: javascript reactjs performance