reactjs - 如何使用 React 中的单个函数独立更改 2 个不同的变量?
问题描述
我是 React 新手,我有一个简短而愚蠢的问题,但我糟糕的措辞使得我无法通过搜索找到答案。
基本上,我有 2 个密码字段。我想独立地显示和隐藏每一个,但我想要一种更优雅的方式,而不是拥有 2 个不同的函数和它们自己的变量,如下所示:
const [showPassword1, setShowPassword1] = useState(false);
const [showPassword2, setShowPassword2] = useState(false);
const togglePasswordVisiblity1 = () => {
setShowPassword1(showPassword1 ? false : true);
};
const togglePasswordVisiblity2 = () => {
setShowPassword2(showPassword2 ? false : true);
};
使用下面的相应按钮:
<span onClick={togglePasswordVisiblity1}>Show/Hide</span>
<span onClick={togglePasswordVisiblity2}>Show/Hide</span>
我确信有一种方法可以将它们重新组合成一个函数,该函数可以根据span
单击的变量更改正确的变量,但是我没有任何运气找到语法。再次抱歉这个问题,希望能尽快得到答复!
在此先感谢您的帮助。
解决方案
您可以尝试使用数组作为状态。检查这个沙盒演示:
import React, { useState } from "react";
export default function App() {
const [showPassword, setShowPassword] = useState([false, false]);
return (
<div className="App">
<button
onClick={() => setShowPassword([!showPassword[0], showPassword[1]])}
>
{JSON.stringify(showPassword[0])}
</button>
<button
onClick={() => setShowPassword([showPassword[0], !showPassword[1]])}
>
{JSON.stringify(showPassword[1])}
</button>
</div>
);
}
通过将状态更新提取到函数中来重构版本:
import React, { useState } from "react";
export default function App() {
const [showPassword, setShowPassword] = useState([false, false]);
const togglePassword = (idx) => {
const newShowPassword = [...showPassword];
newShowPassword[idx] = !newShowPassword[idx]; // toggle
setShowPassword(newShowPassword); // update the state
};
return (
<div className="App">
<button onClick={() => togglePassword(0)}>
{JSON.stringify(showPassword[0])}
</button>
<button onClick={() => togglePassword(1)}>
{JSON.stringify(showPassword[1])}
</button>
</div>
);
}
推荐阅读
- c - 不使用 clflush 逐出缓存行
- azure-ad-b2c - Azure AD B2C 自定义策略注册,仅使用预先填写的会员编号和电子邮件
- xamarin.forms - Xamarin 表单,滚动视图不会滚动到 StackLayout
- javascript - 具有对象属性拼接的角度对象 arr
- asp.net-core - ASP.NET Core 不让我登录
- c# - Web Agora.io DYNAMIC_KEY_EXPIRED
- android - Playstore 向某些用户显示旧版本 虽然有新版本可用
- haskell - 我如何在我的班级中扩展 Haskell 的类型类
- javascript - 历史 API | 如何监听 forward() 事件
- angularjs - dataSource.filter 过滤在前端不可见的 ID