javascript - 如何将 useState 设置器作为函数参数传递?
问题描述
我有一个代码在按钮单击时在深色主题和浅色主题之间切换,如下所示:
应用程序.js:
import React, { useState } from "react";
import Card from "./Card";
import { ChangeTheme } from "./functions/ChangeTheme";
export default function App() {
const [theme, setTheme] = useState("dark-theme");
const changeTheme = (theme) => {
return theme === "dark-theme" ? setTheme("") : setTheme("dark-theme");
};
return (
<div className="App">
<Card theme={theme} changeTheme={() => ChangeTheme(theme)} />
</div>
);
}
Card.js:
import React from "react";
import "./Card.scss";
const Card = ({ theme, changeTheme }) => {
return (
<>
<div className={theme}>Card title</div>
<button onClick={changeTheme}>Click me</button>
</>
);
};
export default Card;
卡片.scss:
.dark-theme {
color: green;
}
上面的代码运行良好。此处的工作示例:https ://codesandbox.io/s/zealous-water-y1j0o
现在我想将其提取changeTheme
到一个单独的函数中。我试图将theme
和setTheme
作为参数传递给ChangeTheme
:
ChangeTheme.js
export const ChangeTheme = ({ theme, setTheme }) => {
return theme === "dark-theme" ? setTheme("") : setTheme("dark-theme");
};
并像这样使用它App.js
:
import React, { useState } from "react";
import Card from "./Card";
import { ChangeTheme } from "./functions/ChangeTheme";
export default function App() {
const [theme, setTheme] = useState("dark-theme");
return (
<div className="App">
<Card theme={theme} changeTheme={() => ChangeTheme(theme, setTheme)} />
</div>
);
}
我得到了错误:setTheme is not a function
,知道为什么以及如何解决它吗?
解决方案
函数的两个参数而不是一个
使用代码框更新 :)
https://codesandbox.io/s/holy-thunder-tbgd6
并改进条件(三元)运算符
export const changeTheme = (theme, setTheme) => {
setTheme(theme === "dark-theme" ? "" : "dark-theme");
};
推荐阅读
- php - PHP 根据日期将活动排序到正确的数组中
- ansible - Ansible 突然使用 svr4pkg 作为 yum 的后端
- javascript - 如何复制整行?
- python - 测量透明图像到实际图像的距离
- angular - InputMask 用于带有千点和十进制逗号的数字
- python - 我如何可视化熊猫中其他列的记录数
- python - ValueError:在 Linux 中使用 WGET 过滤来自 CLI 的简单 api 请求时,无法解码 JSON 对象
- python - Python Selenium 绕过检测?
- xpath - TIBCO 设计器中的“text()=0”是什么意思?
- java - MQTT、Paho、IMqttAsyncClient、连接重试