reactjs - 如何使用 React 组件实例上的 onClick 侦听器更新 State Hook
问题描述
我正在尝试将 onClick 添加到更改 useState 挂钩状态的组件实例,并将其打印到控制台。但是,单击组件实例时不会触发任何内容。
我已经尝试将它包装在 JSX div 元素中,并将 onClick 添加到用于打印到控制台的 div 中,但状态没有更新,因为总是显示未定义。
最终目标是在单击后将状态传递给另一个组件(链接页面)。
这是我的代码。
Card.js
export default function Card(props) {
return (
<div className="card" style={{ background: `${props.background}` }}>
<h2>{props.taskName}</h2>
<p>{props.description}</p>
</div>
);
}
主页.js
import { Link } from "react-router-dom";
import { useState, useEffect } from "react";
import Card from "../components/Card";
import "../pages/Home.scss";
import ProfileButton from "../components/ProfileButton";
import Header from "../components/Header";
import "./PlayerPage";
export default function Home() {
const date = new Date();
const time = date.getHours();
let timeOfDay;
if (time < 12) {
timeOfDay = "Morning";
} else if (time >= 12 && time < 6) {
timeOfDay = "Afternoon";
} else {
timeOfDay = "Evening";
}
const [task, setTask] = useState();
useEffect(() => {
console.log(task);
})
return (
<>
<Header />
<main className="home-main">
<div className="main-wrap">
<section className="card-container">
<h1>Good {timeOfDay}</h1>
<h1>Choose Your Work Style</h1>
<div className="card-wrap">
<Link to="/PlayerPage">
<Card onClick={() => {console.log("hey") }}
taskName="Short Task"
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
/>
</Link>
</div>
</>
);
}
PlayerPage.js - (需要显示更新状态的组件)
export default function PlayerPage() {
return (
<>
<Header />
<main className="player-page-main">
<div className="player-page-main-wrap">
<div className="timer-title-wrap">
<Timer />
<h2 className="task-title">{Updated state here}</h2>
</div>
</div>
</main>
</>
);
}
解决方案
Card
组件需要将传递的处理onClick
程序道具附加到 DOM 元素。
例子:
export default function Card(props) {
return (
<div
className="card"
style={{ background: `${props.background}` }}
onClick={props.onClick}
>
<h2>{props.taskName}</h2>
<p>{props.description}</p>
</div>
);
}
推荐阅读
- javascript - JavaScript 获取最接近的类
- javascript - 将值从一页传递到另一页
- java - 启用基本安全性错误无法将类型 id 'basic' 解析为子类型
- here-api - calculateroute.json 给出 NGEO_ERROR_GRAPH_DISCONNECTED 错误
- jenkins - 如何在 UCD 中设置从 Dev 到 Prod 的完全自动化的部署管道?
- r - 使用三个不同的依赖预测器系列通过 ggplot 绘制图例
- sql - 如何根据列中观察值的百分比进行分类
- postgresql - 在 PostgreSQL 中使用布尔值索引所有 JSONB 字段的最佳方法
- python - Pandas 数据框:将行合并为 1 行并求和一列
- rest-assured - 为什么我在 Assertion 中输入状态码时脚本全是红线