x89*_*x89 6 html javascript typescript reactjs material-ui
我的代码工作正常,当我在密码字段中写入时,文本被隐藏。有什么方法可以添加用户可以选择查看密码的功能吗?
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
return (
<div>
<div className='main-content'>
<form className="form" noValidate autoComplete="off">
{[{ label: "Email", state: email , type: "text", function: setEmail},
{ label: "Password", state: password , type: "password", function: setPassword},
].map((item, index) => (
<div>
<TextField
id="outlined-basic"
key={index}
label={item.label}
variant="outlined"
type= {item.type}
onChange= {e => item.function(e.target.value)}
/>
<br></br><br></br>
</div>
)
)}
</form>
</div>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
jag*_*ler 23
您可以根据某些真/假状态更改值的类型。
// Add these variables to your component to track the state
const [showPassword, setShowPassword] = useState(false);
const handleClickShowPassword = () => setShowPassword(!showPassword);
const handleMouseDownPassword = () => setShowPassword(!showPassword);
Run Code Online (Sandbox Code Playgroud)
// Then you can write your text field component like this to make the toggle work.
<TextField
label='Some label'
variant="outlined"
type={showPassword ? "text" : "password"} // <-- This is where the magic happens
onChange={someChangeHandler}
InputProps={{ // <-- This is where the toggle button is added.
endAdornment: (
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword}
onMouseDown={handleMouseDownPassword}
>
{showPassword ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
)
}}
/>
Run Code Online (Sandbox Code Playgroud)
在您的示例中,您使用循环来遍历您的领域。用我的示例替换您的文本字段会将切换添加到所有字段。这(可能)不是您想要的,因此您必须找到一种不同的方式来呈现这些字段。
// Required imports from the example.
import { TextField, InputAdornment, IconButton } from "@material-ui/core";
import Visibility from "@material-ui/icons/Visibility";
import VisibilityOff from "@material-ui/icons/VisibilityOff";
Run Code Online (Sandbox Code Playgroud)
小智 11
您可以使用 Material UI 的输入元素,它提供了在文本字段末尾添加图标的功能,并且您可以通过单击该图标来隐藏和显示密码
它看起来是这样的:
<FormControl className={clsx(classes.margin, classes.textField)}>
<InputLabel htmlFor="standard-adornment-password">Password</InputLabel>
<Input
id="standard-adornment-password"
type={values.showPassword ? 'text' : 'password'}
value={values.password}
onChange={handleChange('password')}
endAdornment={
<InputAdornment position="end">
<IconButton
aria-label="toggle password visibility"
onClick={handleClickShowPassword}
onMouseDown={handleMouseDownPassword}
>
{values.showPassword ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
/>
</FormControl>
Run Code Online (Sandbox Code Playgroud)
参考链接:https ://material-ui.com/components/text-fields/#InputAdornments.js
嗯,我猜是这样的。它不适用于多个密码字段。
const [showPassword, setShowPassword] = useState(false);
const handleClick = () => {
setShowPassword(prev => !prev);
}
return (
<form className="form" noValidate autoComplete="off">
{[
{
label: "Email",
state: email,
type: "text",
function: setEmail
},
{
label: "Password",
state: password,
type: "password",
function: setPassword,
},
].map((item, index) => (
<div>
<TextField
InputProps={{
endAdornment: item.type ? 'password' (
<InputAdornment position="end">
<IconButton
onClick={handleClick}
edge="end"
>
{showPassword ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
) : null
}}
id="outlined-basic"
key={index}
label={item.label}
variant="outlined"
type={showPassword ? 'text' : item.type}
onChange= {e => item.function(e.target.value)}
/>
<br></br><br></br>
</div>
))
}
</form>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11767 次 |
| 最近记录: |