我注意到某些库(例如classnames
在Preact中很容易获得,而其他库(例如styled-components
需要preact-compat
)。
是什么使React库在本来就不需要使用preact-compat的情况下本身不受支持?
答案 0 :(得分:1)
免责声明:我是在做正事。
react
中不需要preact
中的几个API。但是,由于已经为这些API开发了现有的第三方库,因此我们发布了preact-compat
,并在preact
之上重新实现了它们。
一些例子:
Children
-API:此API特别有趣,因为preact
根本不需要它。对于preact
,children
属性始终是一个数组。
// React
Children.forEach(props.children, child => ...);
Children.map(props.children, child => ...);
Children.count(props.children);
// Preact
props.children.forEach(child => ...);
props.children.map(child => ...);
props.children.length;
unmountComponentAtNode
:这是preact
不需要的另一个API,因为我们可以通过渲染null
来简单地卸载任何树:
import { render } from "preact";
import App from "./app";
// Render App into dom
render(<App />, document.getElementById("root"));
// Unmount tree
render(null, document.getElementById("root"));
如果要删除子树而不是根节点,可以通过从组件返回null
来实现。基本上null
始终被视为 empty 值。
findDOMNode
:// React
const element = React.findDOMNode(componentInstance);
// In Preact that's just a property
const element = componentInstance.base;
在我们的例子中,这甚至适用于功能组件。请注意,在几乎所有情况下,ref
比findDOMNode
更为可取。
摘要::preact-compat
包含大多数针对第三方库的填充程序,期望与react
具有完全的API兼容性。