无状态功能组件只是一个接收props
和返回 React 元素的函数:
const Foo = props => <Bar />;
可以省略父组件中的这种方式<Foo {...props} />
(即React.createElement(Foo, props)
)以支持Foo
直接调用Foo(props)
,因此React.createElement
可以消除微小的开销,但这不是必需的。
直接用props
参数调用功能组件是否被认为是一种不好的做法,为什么?这样做有什么可能的影响?这会以负面方式影响性能吗?
我的具体情况是有一些组件对 DOM 元素进行了浅层包装,因为第三方认为这是一个好主意:
function ThirdPartyThemedInput({style, ...props}) {
return <input style={{color: 'red', ...style}} {...props} />;
}
这是被广泛接受的做法,但它的问题在于无法ref
从无状态函数中获取包装的 DOM 元素,因此组件使用React.forwardRef
:
function withRef(SFC) {
return React.forwardRef((props, ref) => SFC({ref, ...props}));
// this won't work
// React.forwardRef((props, ref) => <SFC ref={ref} {...props } />);
}
const ThemedInput = withRef(ThirdPartyThemedInput);
这样它可以用作:
<ThemedInput ref={inputRef} />
...
inputRef.current.focus();
我知道的明显缺点是withRef
需要开发人员了解包装组件的实现,这不是 HOC 的通常要求。
在上述情况下,它被认为是一种正确的方法吗?