Что заставляет библиотеку React требовать preact-compat? - PullRequest
0 голосов
/ 14 декабря 2018

Я заметил, что некоторые библиотеки, такие как classnames, легко доступны в Preact, но другие, такие как styled-components, требуют preact-compat.

Что делает библиотеку React изначально неподдерживаемой в preact, что она требует использованияpreact-compat?

1 Ответ

0 голосов
/ 24 февраля 2019

Отказ от ответственности: я работаю над preact.

В react есть несколько API, которые не нужны для preact.Но поскольку существующие сторонние библиотеки были разработаны для этих API, мы опубликовали preact-compat, в котором их заново реализуют поверх preact.

Некоторые примеры:

Children -API:

Этот API особенно интересен, потому что он совсем не нужен для preactpreact свойство 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:

Это еще один API, который не требуется для preact, потому что мы можем просторазмонтировать любое дерево путем рендеринга 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 всегда обрабатывается как пустое значение.

findDOMNode:

// React
const element = React.findDOMNode(componentInstance);

// In Preact that's just a property
const element = componentInstance.base;

В нашем случае это работает даже для компонентов функций.Обратите внимание, что почти во всех случаях ref s предпочтительнее, чем findDOMNode.

Сводка: preact-compat содержит в основном прокладки для сторонних библиотек, ожидающих полной совместимости API с react.

...