无状态功能组件只是一个接收函数props
并返回 React 元素:
const Foo = props => <Bar />;
这边走<Foo {...props} />
(i.e. React.createElement(Foo, props)
) 在父组件中可以省略以支持调用Foo
直接地,Foo(props)
, so React.createElement
可以消除微小的开销,但这不是必要的。
直接调用功能组件是否被认为是一种不好的做法props
争论,为什么?这样做可能会产生什么影响?这会对性能产生负面影响吗?
我的具体情况是,有一些组件是 DOM 元素的浅包装器,因为第三方认为这是一个好主意:
function ThirdPartyThemedInput({style, ...props}) {
return <input style={{color: 'red', ...style}} {...props} />;
}
这是一个demo https://stackblitz.com/edit/react-1tdafv这表明了这种情况。
这是被广泛接受的做法,但问题是它不可能得到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 的通常要求。
在上述情况下,这是否被认为是正确的方法?