Reactjs TypeError:无法读取属性';附上';未定义makeStyles.js的
当尝试在生产版本上访问my MERN应用程序的登录组件时,我遇到以下一系列类型错误,如图所示: 我的应用程序()在本地运行得非常好,今天早些时候在Heroku上运行得非常好 我尝试回滚我今天在代码中所做的所有更改,但没有结果。类似地,我检查了package.json(and.lock)以查看是否更改了material UI依赖项,但这是相同的。我似乎不明白为什么它在托管版本上突然停止工作 错误行的代码如下所示。但是,我没有写,因为它是MaterialUI的一部分Reactjs TypeError:无法读取属性';附上';未定义makeStyles.js的,reactjs,typescript,heroku,material-ui,mern,Reactjs,Typescript,Heroku,Material Ui,Mern,当尝试在生产版本上访问my MERN应用程序的登录组件时,我遇到以下一系列类型错误,如图所示: 我的应用程序()在本地运行得非常好,今天早些时候在Heroku上运行得非常好 我尝试回滚我今天在代码中所做的所有更改,但没有结果。类似地,我检查了package.json(and.lock)以查看是否更改了material UI依赖项,但这是相同的。我似乎不明白为什么它在托管版本上突然停止工作 错误行的代码如下所示。但是,我没有写,因为它是MaterialUI的一部分 if (sheetManage
if (sheetManager.dynamicStyles) {
var dynamicSheet = stylesOptions.jss.createStyleSheet(sheetManager.dynamicStyles, _extends({
link: true
}, options));
dynamicSheet.update(props).attach();
state.dynamicSheet = dynamicSheet;
state.classes = mergeClasses({
baseClasses: sheetManager.staticSheet.classes,
newClasses: dynamicSheet.classes
});
if (sheetsRegistry) {
sheetsRegistry.add(dynamicSheet);
}
} else {
state.classes = sheetManager.staticSheet.classes;
}
sheetManager.refs += 1;
这是我第一个部署的应用程序,尽管我尽了最大的努力,但我不知道所有的东西是如何从工作状态变为不工作状态的
编辑。我应该提到,我在Firefox和Chrome中测试过错误日志
编辑#2。经过大量调试后,我发现如果我通过Heroku回滚到提交fccc55a5,错误就消失了。但是,如果我使用该提交创建一个新分支并尝试部署该分支,它将不起作用
请看这里
当我恢复到Heroku中的最后一个构建时,它会起作用。但是,如果我将以前的提交合并到一个新分支中并尝试部署它,它将不会。发生这种情况是因为我将@material ui/core^4.4.0更新为@material ui/core^4.8.1。新版本中可能会出现突破性的更改或错误。最新版本在四天前发布,因此可能还没有解决方案。但对于您的问题,请尝试降级到@material ui/core^4.4.0或您使用的material ui的早期版本,它应该可以工作。不需要回滚到以前的提交。也面临同样的问题。我当时在@material ui/core^4.7.1上,我只是去试验并删除了锁文件和节点单元模块。然后我面对了这个问题。 问题似乎出在@material ui/styles最新版本上
通过将@material ui/core更新为4.6.1,删除锁文件和节点模块,再次安装软件包,解决了问题。在我的例子中,通过删除Box组件解决了问题。我认为问题在于jss和
@material ui/core
在修复之前,我已经安装了样式化组件
,并重写了Box组件:
import {
borders,
BordersProps,
display,
DisplayProps,
flexbox,
FlexboxProps,
palette,
PaletteProps,
positions,
PositionsProps,
shadows,
ShadowsProps,
sizing,
SizingProps,
spacing,
SpacingProps,
typography,
TypographyProps,
} from '@material-ui/system';
import styled from 'styled-components';
/*
* Box with styled-components
*/
export const Box = styled.div<
BordersProps & DisplayProps & FlexboxProps & PaletteProps & PositionsProps & ShadowsProps & SizingProps & SpacingProps & TypographyProps
>`${borders}${display}${flexbox}${palette}${positions}${shadows}${sizing}${spacing}${typography}`;
导入{
边界,
边界计划,
展示,,
展示道具,
flexbox,
FlexboxProps,
调色板,
帕勒特道具,
位置,
职位招聘,
阴影,
暗影喷射,
尺寸,
大小道具,
间距,
SpacingProps,
排版,
印刷字体,
}来自“@物料界面/系统”;
从“样式化组件”导入样式化;
/*
*带有样式化组件的框
*/
导出常量框=styled.div<
边框投影和显示投影和FlexboxProps&PaletteProps&PositionsProps&ShadowsProps&SizingProps&SpacingProps&打字投影
>`${borders}${display}${flexbox}${palette}${positions}${shadows}${Size}${spacing}${排版}`;
尝试将材质ui
升级到4.8.1
。如果不起作用,请将“jss”:“10.0.0”
添加到包.json中作为临时修复
来源:添加
“jss”:“10.0.0”
到
“依赖项”:{}
为我解决了这个问题
——19年12月30日更新--
“jss”现在可以删除
错误已在以下位置修复:
"@material-ui/core": "4.8.2",
快速解决方法:从dynamicSheet.update(props)中删除属性“.attach()”。
但是,这对于生产环境并不可取,对于任何本地开发环境来说都是一个快速解决方案 如果你像我一样使用纱线
,那么你可以通过在包中添加分辨率
字段来解决这个问题
package.json
应该如下所示:
{
"dependencies": {
"@material-ui/core": "^4.8.1",
},
"resolutions": {
"jss": "10.0.0"
}
}
我也在Github上分享了我的解决方案(似乎对其他人也有用):
如果答案对你也有效,请接受它!:) 使用npm:
1-删除节点模块文件夹和package-lock.json文件
2-打开package.json文件
3-在依赖项下更改或添加此项:“@material ui/core”:“^4.6.1”,
4-npm i
解决了我的问题。在更新材料ui后,npm将更新其所有依赖项,因此简单的降级将不起作用。更好的解决方案是删除整个“nodemodules”文件夹,并将package.json和package-lock.json替换为以前提交(更新前提交)中的相同文件。然后进行npm安装,我做了这个,一切正常。这个问题解决了吗?你可以用我的回答暂时解决它:你怎么知道这是问题?@MikeK,因为jss
10.0.1
版本发布了破坏材料UI单元测试的破坏性更改。更多信息请访问:这对我很有用,谢谢。如果您遇到此问题,请检查您安装的material ui core的版本,升级它(或者如果您使用的是“^4.X.X”),只需删除节点_模块,以及package.lock.json或warn.lock.json,然后执行新的npm安装