Я создал простой компонент реакции и хочу условно импортировать его в другое приложение реакции. Мне удалось импортировать его с помощью тега сценария HTML, а затем получить его из переменной window . Вся идея работала до тех пор, пока в модуле была включена реакция. Я хочу использовать экземпляр внешнего реагирования из родительского приложения, поэтому я настроил веб-пакет следующим образом:
const path = require('path');
module.exports = {
entry: './index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'module.js',
library: 'test',
libraryTarget: 'umd',
},
externals: {
'react': {
'commonjs': 'react',
'commonjs2': 'react',
'amd': 'react',
'root': 'React'
}
}
};
edit: Я изменил внешние элементы - { react: 'React' }
, а в родительском приложении я назначил реакцию для переменной window.React
.
const Test = (window as any).test.default
console.log(window.React)
console.log(Test)
return <Test />
Приведенный выше код приводит к той же ошибке.
{Children: {…}, Fragment: Symbol(react.fragment), Profiler: Symbol(react.profiler), Component: ƒ, PureComponent: ƒ, …}
ƒ (){return o.default.createElement("p",{style:{color:"green",fontWeight:"bold"}},"Hello, I come from an external module!")}
module.js:1 Uncaught TypeError: Cannot read property 'createElement' of undefined
решено!
Я обнаружил, что экземпляр React должен быть доступен в переменной window.React в момент загрузки сценария UMD. Сначала мне удалось запустить его, загрузив React из CDN перед загрузкой скрипта. Наконец, я решил загрузить внешний компонент динамически, убедившись, что window.React доступно. Работает как положено.