javascript - 当我在另一个组件中时如何更改 CSS 属性?
问题描述
我正在尝试为我的 Web 应用程序构建一个暗模式,单击该模式会将背景颜色从黑色变为白色,将白色变为黑色。
我有一个用于此暗模式的按钮,单击该按钮会执行以下操作:
1) 调用一个方法来更新我的状态并更改布尔值,该值进一步更改我的类名,无论是亮模式还是暗模式 2) 基于类名我有一组特定的样式,可以将背景颜色设置为黑色或白色。
到目前为止我做了什么:
1)我为更改模式创建的按钮位于名为“Header.js”的组件中。2)在 Header 组件中,我还有其他内容,例如标题和表单。我正在将我的“Header.js”组件渲染到我的“cardlist.js”组件。3) Cardlist组件包含我的各种“卡通人物”卡片
问题是什么:
我要更改的样式在卡片列表组件中,但我在 Header 组件中有我的按钮。那么我可以访问这些类名吗?
我的卡片列表组件:
import React from "react";
import axios from "axios";
import Card from "./Card";
import Header from "./Header";
import "./Styles/CardList.scss";
class CardList extends React.Component {
state = {
// url: `https://rickandmortyapi.com/api/character/${[...Array(494).keys()]}`,
character: [],
typedValue: ""
};
async componentDidMount() {
//const res = await axios.get(this.state.url);
const ids = Array(493)
.fill(null)
.map((_, idx) => idx + 1)
.join(","); // '1,2,3...,300'
const url = `https://rickandmortyapi.com/api/character/[${ids}]`;
const res = await axios.get(url);
this.setState({
character: res.data
});
}
handleChange = e => {
e.preventDefault();
let typedValue = e.target.value;
this.setState({ typedValue });
};
render() {
const character = this.state.character;
const typedValue = this.state.typedValue;
let filter = character.filter(char => char.name.includes(typedValue));
return (
<div className="body-container">
<Header />
<div className="form-container">
<form>
<input
type="text"
name="title"
placeholder="Search Characters"
onChange={this.handleChange}
/>
</form>
</div>
<div className="cardlist-container">
{filter.map(character => (
<Card
key={character.id}
imgURL={character.image}
id={character.id}
name={character.name}
status={character.status}
species={character.species}
type={character.type ? character.type : "Not Known"}
/>
))}
</div>
</div>
);
}
}
export default CardList;
我的页眉组件
import React from "react";
import "./Styles/Header.scss";
import DarkMode from "./DarkMode";
class Header extends React.Component {
state = {
setClass: !JSON.parse(localStorage.getItem("Mode"))
};
handleChange = () => {
this.setState({
setClass: !this.state.setClass
});
};
render() {
localStorage.setItem("Mode", !this.state.setClass);
let toggle = JSON.parse(localStorage.getItem("Mode"));
console.log(toggle);
return (
<div className="header-container">
<div className="button-container">
<div className="button-holder">
{/* <button className="actual-button">DARK/LIGHT</button> */}
<div className={toggle ? "dark-mode" : "light-mode"}>
<button className="actual-button" onClick={this.handleChange}>
DARK/LIGHT
</button>
</div>
</div>
</div>
<div className="heading__main">Rick and Morty Database</div>
</div>
);
}
}
export default Header;
解决方案
推荐阅读
- javascript - 如何使用jquery获取foreach循环内的输入字段的多个值?
- json - JSONSchema - if property is true - another field is required
- boost - utf8 字符串/增强修剪?
- javascript - 如何处理来自 AJAX-FORM 的 PHP GET JSON 请求?
- python - AttributeError:模块'users.models'没有属性'User'(Django)
- regex - 多行的正则表达式语法
- ruby - 替换字符串中的多个不同单词
- linux - 使命令在 RHEL 中失败,但在 ubuntu 中通过
- python-3.x - 在没有 vkapi 的情况下使用 python 请求在 vk 中发送消息
- hook - HasUserCode 用于关联?