是什么使React库需要预先兼容?

时间:2018-12-14 05:08:39

标签: reactjs preact

我注意到某些库(例如classnames在Preact中很容易获得,而其他库(例如styled-components需要preact-compat)。

是什么使React库在本来就不需要使用preact-compat的情况下本身不受支持?

1 个答案:

答案 0 :(得分:1)

免责声明:我是在做正事。

react中不需要preact中的几个API。但是,由于已经为这些API开发了现有的第三方库,因此我们发布了preact-compat,并在preact之上重新实现了它们。

一些例子:

Children-API:

此API特别有趣,因为preact根本不需要它。对于preactchildren属性始终是一个数组。

// 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;

在我们的例子中,这甚至适用于功能组件。请注意,在几乎所有情况下,reffindDOMNode更为可取。

摘要:preact-compat包含大多数针对第三方库的填充程序,期望与react具有完全的API兼容性。