React ничего не запускает с помощью специального примирителяJavascript

Форум по Javascript
Ответить
Anonymous
 React ничего не запускает с помощью специального примирителя

Сообщение Anonymous »

Я создаю свой собственный инструмент примирения React 19:

Код: Выделить всё

export class Reconciler {

get hostConfig(): ReactReconciler.HostConfig {
return {
getRootHostContext: notSupportedYet,
getChildHostContext: notSupportedYet,
shouldSetTextContent: notSupportedYet,
// ...
}
}
}

Код: Выделить всё

notSupportedYet
— это просто метод, который выдает исключение. У меня есть реальные реализации для всех методов, но поскольку проблема в том, что ни один из них не вызывается, я просто проверяю, когда они вызываются.
Затем у меня есть класс Host:

Код: Выделить всё

export class Host {

private readonly manifest: Manifest;

constructor(manifest: Manifest) {
this.manifest = manifest;
}

public async render(container: HTMLElement) {

const apps = await Promise.all(
this.manifest.apps.map(async (app) => {
const module = await import(app.path);
const App = module.default;
return App();
})
);

const reconciler = new Reconciler();
const reactReconciler = ReactReconciler(reconciler.hostConfig);
const root = reactReconciler.createContainer(container, 0, false, '', null);

reactReconciler.updateContainer(apps, root, null, () => {
console.log('Did render app');
});
}
}
Наконец, все это вызывается в браузере:

Код: Выделить всё

document.addEventListener('DOMContentLoaded', async function () {

const manifest = {
'apps': [
{
'name': 'App1',
'path': '/dist/App.js', // This includes already-transpiled JSX
},
],
}

const host = new Host(manifest);
const container = document.getElementById('container');

await host.render(container);
});
Все это собирается и работает нормально. Мои приложения включают JSX, но я транспилирую их во время сборки. Я регистрирую объекты здесь и там, и все выглядит нормально: в actReconciler есть множество определений функций, root — это FiberRootNode, apps — это массив с элементами React, а контейнер — это просто элемент div.
Мой JSX преобразуется в правильный элемент реакции с $$typeof, props и т. д. props.children также является реагируйте на элемент, поэтому дерево элементов строится правильно. root.current — это FiberNode, хотя root.current.child имеет значение null. Итак, дерево элементов существует, но оно не преобразуется в оптоволоконные узлы.
Я видел в Интернете несколько примеров, и все они указывают на то, что движение идет в правильном направлении. Однако ничего не происходит. notSupportedYet не выдает, ничего не отображается, никаких ошибок — ничего.

Подробнее здесь: https://stackoverflow.com/questions/798 ... reconciler
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»