reactjs - React 状态钩子,传入方法和参数 onClick
问题描述
我试图用“onClick”传递一个方法及其所需的参数,但它不起作用。
我读到你可以这样做: onClick={() => handleSort(column)} 但在渲染调用中使用箭头函数的问题是它每次都会创建一个新函数,最终导致不需要重新渲染。
function ToggleSwitch() {
const [values, setValues] = React.useState({
astma: "off",
});
function toggle (nameIn, valueIn){
console.log("Toggle")
const {name, value} = (nameIn, valueIn);
if (value === "off") {
setValues({
...values,
[name]: "on",
});
} else if (value === "on") {
setValues({
...values,
[name]: "off",
});
}
};
//return just the function and make the html in the page and on klick use the toggle function
//remember to export values as well.
return (
<div
className={`switch ${values.astma}`}
onClick={toggle("astma", values.astma)}
id={"astma"}
name={"astma"}
/>
);
}
ReactDOM.render(<ToggleSwitch />, document.getElementById("root"));
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
解决方案
如果您出于某种原因不想使用箭头。您可以改用柯里化方式:
function ToggleSwitch() {
const [values, setValues] = React.useState({
astma: "off",
});
const toggle = (nameIn, valueIn) => e => {
console.log("Toggle", nameIn, valueIn)
const {name, value} = (nameIn, valueIn);
if (value === "off") {
setValues({
...values,
[name]: "on",
});
} else if (value === "on") {
setValues({
...values,
[name]: "off",
});
}
}
//return just the function and make the html in the page and on klick use the toggle function
//remember to export values as well.
return (
<div
className={`switch ${values.astma}`}
onClick={toggle("astma", values.astma)}
id={"astma"}
name={"astma"}
>Currying is cool. Click ME!</div>
);
}
ReactDOM.render(<ToggleSwitch />, document.getElementById("root"));
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
推荐阅读
- https - 使用 GCP 负载均衡器将静态网站重定向到 HTTPS
- python - 检查对象列表中是否存在类属性值
- react-native - React Native Expo 环境变量
- ios - FileManager removeItem() 和 getContent() 问题
- php - Php、bash、sshpass、scp 无法通过 shell_exec 工作
- php - PHP:使用带参数的strip_tags和array_map
- vue.js - v-autocomplete 菜单没有隐藏在移动键盘后面
- pyspark - Pyspark,将冒号添加到分隔字符串
- r - 将x轴标签更改为ggplot中的字符
- c++ - 如何在c ++中除以0