- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 useStyles 来设置我的登录页面的样式。页面上的所有内容都有正确的样式,刷新后不会丢失,除了按钮。
按钮是页面中唯一在刷新后失去样式的东西。
登录.js:
import { useEffect, useState, Fragment } from 'react';
import axios from 'axios'
import { BrowserRouter as Router, Switch, Route, MemoryRouter, Redirect, useHistory } from "react-router-dom";
import { useStyles } from './style/Login-styling'
import { Container, Grid, Paper, Avatar, TextField, Button, Typography, Link, Snackbar } from '@material-ui/core'
import MuiAlert from '@material-ui/lab/Alert';
import Slide from '@material-ui/core/Slide';
const bcrypt = require('bcryptjs');
function TransitionUp(props) {
return <Slide {...props} direction="up" />;
}
function Alert(props) {
return <MuiAlert elevation={6} variant="filled" {...props} />;
}
export default function Login() {
const [name, setName] = useState('')
const [password, setPassword] = useState('')
const [open, setOpen] = useState(false);
const [alert, setAlert] = useState("Wrong credentials!");
const history = useHistory();
const classes = useStyles();
async function csrf() {
axios({
method: 'GET',
url: '/api/csrf',
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
credentials: "include",
mode: 'cors'
})
.then(function(res) {
localStorage.setItem('csrfToken', res.data.csrfToken)
})
}
useEffect(() => {
csrf();
}, [])
const passwordEnter = e => {
if (e.code == "Enter") {
login()
}
};
const nameEnter = e => {
if (e.code == "Enter") {
document.getElementsByName('password')[0].focus()
}
};
async function login() {
axios({
method: 'POST',
url: '/api/login',
headers: {
'X-CSRF-Token': localStorage.getItem('csrfToken')
},
data: {
name: name,
password: password
},
credentials: "include",
mode: 'cors'
})
.then(function(res) {
if(res.data.result == "Login successful"){
switch(res.data.job){
case "doctor":
history.replace("/dashboard1")
break;
case "pharmacist":
history.replace("/dashboard2")
}
}
else if (res.data.result == "Invalid credentials"){
setAlert("Wrong credentials!")
setOpen(true);
}
})
.catch(function(err){
if (err) {
setAlert("Invalid CSRF Token!")
setOpen(true);
}
})
}
const handleClose = (event, reason) => {
if (reason === 'clickaway') {
return;
}
setOpen(false);
};
return(
<Fragment>
<Container className={classes.container} component="main" maxWidth="xs">
<div className={classes.paper}>
<Typography variant="h3" className="title">Login</Typography>
<div className={classes.form}>
<TextField color="secondary" margin="normal" fullWidth variant="filled" label="Name" onKeyPress={(e) => nameEnter(e)} autoFocus={true} autoComplete="off" spellCheck="false" type="text" name="name" id="name" value={name} onChange={(e) => setName(e.target.value)}/>
<TextField color="secondary" margin="normal" fullWidth variant="filled" label="Password" onKeyPress={(e) => passwordEnter(e)} type="password" name="password" id="password" value={password} onChange={(e) => setPassword(e.target.value)}/>
</div>
<Button variant="contained" className={classes.button} onClick={login}>Login</Button>
</div>
</Container>
<Snackbar open={open} autoHideDuration={6000}
onClose={handleClose}
>
<Alert onClose={handleClose} severity="error">
{alert}
</Alert>
</Snackbar>
</Fragment>
)
}
登录样式.js:
import { makeStyles } from '@material-ui/core/styles';
export const useStyles = makeStyles(() => ({
container: {
transform: 'translate(-50%)',
},
button: {
background: 'rgba(255, 255, 255, 0.3)',
color: 'rgba(255, 255, 255, 1)',
fontSize: '110%',
border: 0,
borderRadius: 3,
height: 48,
width: '40%',
padding: '0 30px',
marginTop: '5%',
'&:hover': {
color: 'rgba(48, 48, 48, 1)',
},
},
paper: {
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
marginTop: '60%',
},
form: {
width: '80%'
},
}));
应用程序.js:
import { useState, useEffect } from 'react'
import { AnimatePresence, motion } from 'framer-motion'
import Login from './components/Login'
import Dashboard1 from './components/Dashboard2'
import Dashboard2 from './components/Dashboard1'
import Admin from './components/Admin'
import axios from 'axios'
import { BrowserRouter as Router, Switch, Route, MemoryRouter, Redirect, useHistory, Link, useLocation } from "react-router-dom";
import {Helmet} from "react-helmet";
import "./App.css";
import { MuiThemeProvider, createMuiTheme, responsiveFontSizes } from '@material-ui/core/styles';
import { colors } from '@material-ui/core';
import CssBaseline from '@material-ui/core/CssBaseline';
import 'fontsource-roboto';
export default function App(){
const history = useHistory();
let theme = createMuiTheme({
palette: {
type: 'dark',
secondary: {
main: colors.blue[200]
}
},
});
theme = responsiveFontSizes(theme)
const location = useLocation()
const pageTransition = {
initial: {
opacity: 0,
y: "100vh",
},
in: {
opacity: 1,
y: 0,
scale : 1
},
out: {
opacity: 0,
y: "-100vh",
scale: 1,
}
}
const transitionOptions = {
type: "spring",
ease: "anticipate",
duration: 0.6,
delay: 0.5
}
return (
<MuiThemeProvider theme={theme} style={{position: 'relative'}}>
<CssBaseline />
<AnimatePresence>
<Switch location={location} key={location.pathname}>
<Route exact path="/">
<motion.div
initial="false"
animate="in"
exit="out"
variants={pageTransition}
transition={transitionOptions}
style={{position: 'absolute', left: '50%'}}
>
<Login />
</motion.div>
</Route>
<Route path="/dashboard1">
<motion.div
initial="initial"
animate="in"
exit="out"
variants={pageTransition}
transition={transitionOptions}
style={{position: 'absolute'}}
>
<Dashboard1 />
</motion.div>
</Route>
<Route path="/dashboard2">
<motion.div
initial="initial"
animate="in"
exit="out"
variants={pageTransition}
transition={transitionOptions}
style={{position: 'absolute'}}
>
<Dashboard2 />
</motion.div>
</Route>
<Route path="/admin">
<motion.div initial="initial" animate="in" exit="out" variants={pageTransition}>
<Admin />
</motion.div>
</Route>
</Switch>
</AnimatePresence>
</MuiThemeProvider>
);
}
刷新前:
最佳答案
JSS 按需创建样式的方式,Button 组件的核心样式覆盖了您使用 makeStyles
定义的样式仅仅因为组件是在自定义样式之后导入的。如果您在开发工具中检查该元素,您可以看到 .MuiButton-root
样式会覆盖生成类 .makeStyles-button-2
下的样式-- 两个单类 CSS 选择器具有相同的特异性,所以最后一个最终获胜。
要解决此问题,您只需重新排序导入,以便 useStyles
在 Button
之后导入以及其他 MUI 组件。
https://codesandbox.io/s/laughing-lamport-0i1zt?file=/src/components/Login.js
关于javascript - 页面刷新后,Material UI Button 失去样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67797057/
我在我的项目(Ubuntu 18.04.2 LTS)中使用了 celery 4.4.0 版本。当我提出异常('功能中的功能太少无法分类')时, celery 项目失去了 worker ,我得到了这样的
我在这样的更新面板中有一个 GridView :
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 这个问题似乎不是关于 a specific programming problem,
当我尝试使用 jquery 的 html() 将 HTML 附加到另一个元素时。我失去了 ng-click 的能力。这是我的代码的粗略描述。例如我有一个名为 testController 的 Cont
我正在将 python 连接到 mySqL 数据库,并从 android 发送两个 Double 值以存储在 Mysql 中,然后我收到此错误 enter code here Exception i
无法理解为什么这个简单的事情没有反应性。看起来我错过了一些 Vue 的基础。 {{connection_status}} export default {
我不明白出了什么问题,在我的设备上应用程序运行良好,但有时在日志中(应用程序用户、 session 、崩溃......通过某些服务跟踪)我看到应用程序崩溃(NullPointerException),
我正在处理一个我有点困惑的问题。问题是假设您是二战期间英国空军的一名将军。您还剩下 100 架飞机来保卫英国。在您执行的每个任务中,每架飞机都有 50% 的几率被德国高射炮击落,因此每次执行任务您都会
我相信我的问题与以下问题非常相似 Spring security 'remember me' cookie not avaiable in first request . 基本上,我有一组用于公司内部
似乎 Bootstrap 下拉按钮在单击后仍保持焦点。 我的用例与此不兼容, 用户应该在单击按钮后按“SPACE”键,为了触发与按钮无关的东西。 问题是按钮保持焦点状态,因此按空格键 激活按钮。 我希
我有一个 MKMapView,其中有很多从解析器 xml 定义的注释引脚;那是我的代码: -(IBAction)LoadAnnotation:(id)sender { RXML element
我有一个 HTML 表格,用户可以在其中输入他的待机开始时间和待机结束时间,该时间计算总时数,并基于此计算获得的补偿时数。这一切都有效。 现在,它所做的是,每当用户输入开始和结束时间时,用户必须将焦点
Windows 系统更新后,Eclipse 不再了解 Android 的任何信息...我如何恢复对 Android 的支持?我尝试重新安装 SDK,但没有成功... 太奇怪了。我注意到项目模板丢失了,
我正在发送 SOAP 请求来更新某些实体。当我创建(而不是更新)几乎相同的东西时,一切正常。我跟踪了客户端和传输的日志记录,最后它给了我一个线索。它看起来像这样: DEBUG:suds.client:
这个问题在这里已经有了答案: TypeError: Cannot read property 'setState' of undefined (3 个答案) How to access the co
我使用 PostgreSQL 和 repmgrd 创建了一个 Docker 镜像,所有这些镜像都是使用 supervisor 启动的。 我现在的问题是,当它启动时,由 supervisor 生成的 r
新的 iOS 开发者为 iPhone 编写第一个委托(delegate)应用程序。 模态调用的父 View Controller 有六个 subview Controller ,它们使用父 View
我目前正在 MVC4 中创建一些用户配置文件编辑表单,并且为了测试,我将 UserId 属性呈现为表单上的只读文本框,如下所示: @Html.LabelFor(model => model.
我是一名优秀的程序员,十分优秀!