javascript - 为什么 clickHandler 不更新状态?
问题描述
我正在尝试设置一个随活动按钮而变化的背景,clickHandler 将向我显示正确的按钮 ID,但随后无法更新状态......我错过了什么?
import React, { Component } from "react";
import { NavLink } from "react-router-dom";
import river from "../img/river.jpg";
import snow from "../img/snow.jpeg";
import weather from "../img/weather.jpg";
export default class LowerHeader extends Component {
state = {
imgUrl: river
};
clickHandler = e => {
if (e.target.id === 1) {
this.setState({
imgUrl: weather
});
} else if (e.target.id === 2) {
this.setState({
imgUrl: snow
});
} else if (e.target.id === 3) {
this.setState({
imgUrl: river
});
}
console.dir(e.target);
};
render() {
let styles = {
backgroundImage: `url(${this.state.imgUrl})`,
backgroundSize: "cover",
backgroundPosition: "0% 70%",
overflow: "hidden"
};
return (
<React.Fragment>
<div
className="link-bg-img"
style={styles}
alt="Background related to tab chosen"
/>
<header className="lower-header">
<ul>
<NavLink
to="/maincontent/weather"
id="1"
onClick={this.clickHandler}
>
Local Weather
</NavLink>
<NavLink to="/maincontent/snow" id="2" onClick={this.clickHandler}>
Snow Report
</NavLink>
<NavLink to="/maincontent/river" id="3" onClick={this.clickHandler}>
River Flows
</NavLink>
</ul>
</header>
</React.Fragment>
);
}
}
我希望与页面一起加载的初始状态保持不变......它可以工作。然后应该随着每个按钮的点击而改变。谢谢!
解决方案
e.target.id
是一个字符串,你将它与一个数字进行比较===
。由于类型不同,它失败了。
使用这样的东西:
clickHandler = e => {
const id = parseInt(e.target.id, 10);
if (id === 1) {
...
推荐阅读
- reactjs - onclick 后 react-google-maps 地图刷新
- c - 从一个文件搜索数据并将其写入另一个文件
- asp.net - 无法使用 DownloadProgressChangedEventHandler 更新文本框
- python - 如何使用 pandas/python 从 excel 文件中保存图像并给出不同的列名
- swift - Swift - 函数类型作为返回类型
- hugo - 如何添加独立于主题的单个 HUGO 页面并添加对 SCSS 的引用?
- domain-driven-design - 有界上下文中的一组相关聚合
- javascript - 在 js 中将另一个函数作为点运算符传递,例如 A.mainFunction(parm1,parm2,parm3)
- java - 在数组中它存储 NULL 而不是 PDF 文件名
- oracle-apex - 如何使用 IG 方法将新记录添加到交互式网格中,然后使用 $s() api 设置列的值?