- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为这是 重复 React 问题
当前行为:
在 container
项目,当我路由到 sub-app/foo
时它工作正常.但是当我路由到 sub-app
我收到以下错误:
Uncaught Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
You might have mismatching versions of React and the renderer (such as React DOM)
You might be breaking the Rules of Hooks
You might have more than one copy of React in the same app See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.
通知:
sub-app/foo
将获得一个类组件。
sub-app
将获得一个 React hooks 组件
subApp
代码将在
container
中正常工作
/mono-repo
packages
- container
- subApp
// /packages/container/src/App.js
import React from 'react'
import { BrowserRouter, Switch, Route, Link } from 'react-router-dom';
import About from './About';
import Header from './Header';
import Loadable from 'react-loadable'
const Logo = () => {
return <div>LOGO</div>
}
const loadableComponent = (loader) => {
return Loadable({
loader: () =>
loader().then(
(res) => {
return res
},
(e) => () => {
console.log(e)
}
),
loading() {
return (
<div>loading</div>
)
}
})
}
const loadSubApp = (subAppInfo) => {
const { name, host } = subAppInfo
return new Promise((resolve, reject)=> {
fetch(`${host}/${name}/asset-manifest.json`)
.then(res => res.json())
.then(manifest => {
const script = document.createElement('script');
script.src = `${host}${manifest.files['main.js']}`;
const timeout = setTimeout(()=>{
console.error(`MicroApp ${name} timeout`);
reject(new Error(`MicroApp ${name} timeout`));
},20000)
script.onload = () => {
clearTimeout(timeout)
const app = window[name]
console.log({app, name})
console.log(`MicroApp ${name} loaded success`);
resolve(app)
}
script.onerror = (e) => {
clearTimeout(timeout);
console.error(`MicroApp ${name} loaded error`, e);
reject(e)
}
document.body.appendChild(script);
})
})
}
const subLoader = (name) => async () => {
const App = await loadSubApp({ name: 'subApp', host: process.env.REACT_APP_SUBAPP_HOST })
console.log({App, window})
return App[name]
}
const App = () => {
return (
<BrowserRouter>
<React.Fragment>
<Logo />
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/header">header</Link>
</li>
<li>
<Link to="/sub-app">subApp</Link>
</li>
<li>
<Link to="/sub-app/foo">subApp foo</Link>
</li>
</ul>
<Switch>
<Route exact path="/" component={About} />
<Route exact path="/header" render={() => <Header /> }/>
<Route exact path="/sub-app/foo" render={()=> {
const RenderSubApp = loadableComponent(subLoader('Foo'))
return <RenderSubApp />
}}/>
<Route exact path="/sub-app" render={()=> {
const RenderSubApp = loadableComponent(subLoader('Count'))
return <RenderSubApp />
}}/>
</Switch>
</React.Fragment>
</BrowserRouter>
)
}
// /packages/subApp/config-overrides.js
const {
override,
// addWebpackAlias
} = require("customize-cra");
// const path = require("path");
const dropConsole = () => {
return (config) => {
if (config.optimization.minimizer) {
config.optimization.minimizer.forEach((minimizer) => {
if (minimizer.constructor.name === "TerserPlugin") {
minimizer.options.terserOptions.compress.drop_console = true;
}
});
}
return config;
};
};
const optBuild= () => config => {
config.optimization.runtimeChunk = false;
config.optimization.splitChunks = {
cacheGroups: {
default: false,
},
};
return config
}
const disableSourceMap = () => (config) => {
if (process.env.NODE_ENV === "production") {
config.devtool = false;
}
return config;
};
const customizeCraOverride = override(
disableSourceMap(),
dropConsole(),
optBuild(),
// addWebpackAlias({
// 'react': path.resolve(__dirname, '../container/node_modules/react'),
// 'react-dom': path.resolve(__dirname, '../container/node_modules/react-dom')
// })
);
const webpack = (config, env) => {
const webpackConfig = customizeCraOverride(config, env);
return {
...webpackConfig,
output: {
...webpackConfig.output,
library: "subApp",
libraryTarget: 'window',
},
// externals: {
// 'react': 'react',
// 'react-dom': 'react-dom'
// },
};
};
module.exports = {
webpack,
};
项目链接
bug-demo
最佳答案
终于解决了这个问题。
// /packages/subApp/config-overrides.js
...
const webpack = (config, env) => {
const webpackConfig = customizeCraOverride(config, env);
return {
...webpackConfig,
output: {
...webpackConfig.output,
library: "subApp",
libraryTarget: 'window',
},
externals: {
'react': 'React',
'react-dom': 'ReactDOM'
},
};
};
module.exports = {
webpack
};
// packages/container/src/index.js
...
export {
React,
ReactDOM
}
// packages/container/config-overrides.js
...
const webpack = (config, env) => {
const webpackConfig = customizeCraOverride(config, env);
return {
...webpackConfig,
output: {
...webpackConfig.output,
libraryTarget: 'umd',
},
}
};
module.exports = {
webpack
};
关于javascript - yarn 工作区和 lerna 导致无效的 Hook 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71464758/
YARN 中的 yarn-site.xml 与 yarn-default.xml 有什么区别?看起来yarn-default.xml 在Hadoop 2.2 中已被弃用? 最佳答案 在所有 Hadoo
我们有一个在 yarn 上运行的流媒体应用程序,我们希望确保它 24/7 全天候运行。 有没有办法告诉 yarn 在失败时自动重启特定的应用程序? 最佳答案 你试过了吗Hadoop Yarn - Re
我在根队列下有 4 个队列,配置如下。 |-------------|-----------------|---------------------|-------------------| | Qu
我正在使用 YARN(和 Dask)版本 Hadoop 2.7.3-amzn-1 在 AWS EMR 上构建应用程序。我正在尝试测试各种故障场景,并且我想模拟容器故障。我似乎找不到一种简单的方法来杀死
我想创建一个 cron 来通过它的应用程序名称杀死一个 yarn 应用程序(Spark)。但我发现 yarn 应用程序 -kill 需要一个应用程序 ID。是否有解决方案可以通过应用程序名称杀死它,或
我正在尝试从此链接运行通用入门套件:https://github.com/ng-seed/universal即使我按照步骤安装了 Yarn,当我运行命令来运行服务器时,它给了我以下错误: 错误:找不到
我正在尝试 YARN 2.2 中的分布式 Shell 示例,希望有人能澄清托管和非托管应用程序管理器之间的区别是什么? 例如以下几行出现在客户端代码中 // unmanaged AM appConte
我有一个像这样的工作区项目: /project - package.json /packages /project-a package.json
这两个到底做什么用,在哪里使用它们? yarn 安装 yarn 构建 最佳答案 简而言之,yarn install 是用于安装项目所有依赖项的命令,通常在 package.json 文件中分配。在大多
所以,到目前为止,似乎没有 yarn audit --fix ,所以我想弄清楚如何修复我的 yarn audit错误。 我试过 yarn upgrade它修复了一些错误(这很好),但仍然存在一些错误。
我正在使用一个使用 yarn 的 dockerized pyspark 集群。为了提高数据处理管道的效率,我想增加分配给 pyspark 执行程序和驱动程序的内存量。 这是通过将以下两个键值对添加到
我尝试重新安装yarn,但重新安装后发现这个问题,我尝试搜索互联网但没有找到解决方案。 fiii@neo:~$ yarn --version node:internal/modules/cjs/loa
我正在试验2号纱和植面。 我创建了一个新文件夹:/projects/yarn2/根据他们的安装指南https://yarnpkg.com/getting-started我跑了 cd /projects
我是hadoop和YARN的新手。启动hdfs之后,我使用软件包中提供的start-yarn.sh启动YARN并出现错误。 我在Ubuntu 18.04上使用hadoop 3.2.0,jdk-11。
Apache Spark最近更新了版本至0.8.1,新增了yarn-client模式。我的问题是,yarn-client 模式的真正含义是什么?在文档中它说: With yarn-client mod
我们有一个在 HDFS 2.7.3 上运行的 Spark 流应用程序,使用 Yarn 作为资源管理器....在运行应用程序时......这两个文件夹 /tmp/hadoop/data/nm-local
我的机器上的 yarn 命令有问题。我的机器上安装了 hadoop 和 yarn 包管理器(Javascript)。当我运行 yarn init 时,它调用 hadoop 的 YARN 并响应: Er
我正在尝试运行此处列出的简单 yarn 应用程序:https://github.com/hortonworks/simple-yarn-app 我是 Java 和 Hadoop 的初学者,当我尝试使用
我正在尝试使用 YARN node labels标记工作节点,但是当我在 YARN(Spark 或简单的 YARN 应用程序)上运行应用程序时,这些应用程序无法启动。 使用 Spark,指定 --co
我一直只使用 npm 而从不显式使用 yarn/webpack。我需要从这个 repo 运行代码: https://github.com/looker-open-source/custom_visua
我是一名优秀的程序员,十分优秀!