我正在使用Material UI v4,正在从一个文件中导出样式,但是这些样式在其他组件styles.js中不起作用
const useStyles = makeStyles(theme => ({
root: {
display: 'flex',
},
// textField component styles
textFieldInput: {
margin: theme.spacing(2),
width: 250,
minWidth: 250,
},
formControl: {
margin: theme.spacing(2),
minWidth: 120,
},
})
export {useStyles}
在我的组件文件中
....
const classes = useStyles(styles);
return (
<TextField
className={classes.textFieldInput}
label={label}
placeholder={label}
error={touched && invalid}
helperText={touched && error}
{...input}
disabled={disabled || false}
readOnly={readOnly || false}
required={required || false}
InputProps={{ readOnly, ...custom }}
{...custom}
/>
);
....
当我在组件中使用样式时,样式将在第一次热重装时起作用,但是之后样式将不会产生任何效果,为什么会有这样的想法?以及我该如何解决
如果您将两个CSS类以相同的特异性程度应用于同一元素,则获胜者将是在文档中最后定义的CSS类(根据<style>
元素在中的顺序<head>
,而
不是 类的顺序)class
样式元素的属性中的名称字符串)。
此页面是一个示例,其中包含两个重现您的问题的TextField元素。如果打开浏览器开发人员工具并查看其<style>
元素,您将看到from样式makeStyles
首先出现,然后是from样式TextField
(例如MuiFormControl)。我在下面显示了一个缩写版本:
<style data-jss="" data-meta="makeStyles">
.makeStyles-textFieldInput-1 {
margin: 32px;
min-width: 250px;
}
</style>
<style data-jss="" data-meta="MuiFormControl">
.MuiFormControl-root {
border: 0;
margin: 0;
display: inline-flex;
padding: 0;
position: relative;
min-width: 0;
flex-direction: column;
vertical-align: top;
}
.MuiFormControl-marginNormal {
margin-top: 16px;
margin-bottom: 8px;
}
.MuiFormControl-marginDense {
margin-top: 8px;
margin-bottom: 4px;
}
.MuiFormControl-fullWidth {
width: 100%;
}
</style>
<style data-jss="" data-meta="MuiTextField">
</style>
所述MuiFormControl- root
类被施加到经由文本域的指定的类相同的元件className
特性(例如,从textFieldInput类makeStyles/useStyles
)。由于MuiFormControl
<style>
元素出现在该makeStyles
<style>
元素之后,因此MuiFormControl的默认样式为,margin
并且min- width
胜过所指定的自定义样式makeStyles
。
这些<style>
元素的顺序由makeStyles
调用顺序控制。对于给定Material-
UI组件的默认样式,makeStyles
在首次导入该组件时调用。
对于典型的使用模式,在makeStyles
同一个JavaScript文件中调用,然后调用该类useStyles
并将类传递给Material-
UI组件,该顺序将始终是您想要的顺序,因为Material-UI组件的导入将在调用之前进行到makeStyles
。
当您将调用移至makeStyles
另一个文件并导入useStyles
其返回的方法时,您会useStyles
在 导入Material-
UI组件(例如本例中的TextField) 之前 引入了导入的可能性。
此沙箱中的代码对此进行了演示:https :
//codesandbox.io/s/makestyles-
first-i1mwh
它可能在第一次热重新加载时起作用的原因是,makeStyles
<style>
在进行更改时,元素已被删除,然后添加到最后。Mui
*样式元素不会更改,因此它们会保留在原位置(在makeStyles
重新加载页面之前,它在新样式元素之前)。
您无法轻易地使用高阶组件API(即withStyles
)来以这种方式射击自己的脚,因为在其中makeStyles
被调用了,withStyles
因此withStyles
在将其作为参数传递之前,您始终会导入被包装的组件。
您可以通过几种方法解决此问题。一种方法是仅确保 在* 导入Material-UI组件(例如) 之后 导入useStyles
函数。
*TextField
更改:
import { useStyles } from "./styles";
import TextField from "@material-ui/core/TextField";
相反是:
import TextField from "@material-ui/core/TextField";
import { useStyles } from "./styles";
这在这里进行了演示:https :
//codesandbox.io/s/import-textfield-
first-9qybd
但是,这是相当脆的,如果你有一个以上的类型组件的风格styles.js
和进口styles.js
从许多文件,自那时以来它可靠地工作,你都依赖于进口
所有 由风格的材质,UI组件styles.js
的前 第一 位置您导入的styles.js
。
解决此问题的另一种方法是导出Material-
UI组件的样式版本,而不是导出useStyles
功能。然后,您只需导入此自定义组件,而不是Material-UI组件。
import { withStyles } from "@material-ui/core/styles";
import MuiTextField from "@material-ui/core/TextField";
const styles = theme => ({
root: {
margin: theme.spacing(4),
minWidth: 250
}
});
export const TextField = withStyles(styles)(MuiTextField);
此处通过两个不同的语法选项进行了演示:https : //codesandbox.io/s/import-styled-
textfield-1ytxl
我正在使用php和javascript进行网络编程,这是我想问的一个一般性问题,通常在页面刷新时,文本区域或输入中的所有内容都会被删除; 是否有办法保留用户输入、键入的字符或复选框?不保存到会话中?还是我真的需要保存它?非常感谢。 (我不是说表单提交导致重新加载,但只是简单地键入文本区域,然后按下刷新按钮。)
问题内容: 我是新手。我正在使用获取对象列表并将其显示在第一页上的服务。然后根据单击的对象,在下一页上设置选项卡标题。但是,当我刷新页面时,列表的范围丢失了,并且选项卡头引发了异常,导致页面无法显示信息。即使刷新第二页,是否可以保留上一个屏幕上单击了哪个对象的信息? 问题答案: 您可以使用角度本地存储 角度本地存储 示例如何使用它: 使用本地存储的示例
我试图导出我的java项目,以便能够将其发送到一家公司,以便找到工作。我使用Eclipse Mars。 我想给他们发送源文件,我的程序工作的(. json)文件,一个可执行的jar和我正在使用的外部库(json-implified-1.1)。 我已经尝试过这种技术将Java项目导出为. jar,包括. java源代码并保留外部库依赖项,但它对我不起作用,当我试图启动我的项目时,我会得到以下错误 如
我希望有人遇到这个问题: 在服务层中,我正在捕获一个异常,在catch块中,我想调用< code>saveAndFlush在数据库中保存一条记录,然后抛出应用程序异常。问题是保存和刷新不能持久保存记录,事务似乎会回滚。 代码是这样的: 有什么想法吗? 非常感谢。
本文向大家介绍vue单页应用在页面刷新时保留状态数据的方法,包括了vue单页应用在页面刷新时保留状态数据的方法的使用技巧和注意事项,需要的朋友参考一下 在Vue单页应用中,如果在某一个具体路由的具体页面下点击刷新,那么刷新后,页面的状态信息可能就会丢失掉。这时候应该怎么处理呢?如果你也有这个疑惑,这篇文章或许能够帮助到你 一、问题 现在产品上有个需求:单页应用走到某个具体的页面,然后点击刷新后,刷
本文向大家介绍基于JS实现table导出Excel并保留样式,包括了基于JS实现table导出Excel并保留样式的使用技巧和注意事项,需要的朋友参考一下 浏览器环境:谷歌浏览器 1.在导出Excel的时候,保存table的样式,有2种方法,①是在table的行内写style样式,②是在模板里面添加样式 2.第一种方式:行内添加样式 <td>公司一</td> 效果: 完整代码: 3.第二种方式:在