reactjs - 在 React 中从子功能组件更改父组件状态
问题描述
我创建了一个签名页面组件,其中包含登录组件和注册组件。我的问题是如何将 onClick 函数从父级传递给子级以更改父组件(签名页面组件)的状态?我期望的是,通过单击子组件中的按钮,可以切换父组件的活动状态,并且可以根据活动状态更改样式。我正在尝试将 handleClick 函数从父级传递给子级,但效果不佳。
有什么解决办法吗?
密码箱中的详细信息: https ://codesandbox.io/s/wizardly-sanne-rf0u2 ?file=/src/components/SignIn/SignIn.js
在我的父组件(SignPage)中,
function SignPage() {
const [active, setActive] = useState(false);
const handleClick = () => {
setActive(!active);
};
return (
<div className="sign-container">
<div
className={active ? "sign-wrapper s-signup" : "sign-wrapper"}
>
<SignIn handleClick={handleClick} />
<SignUp handleClick={handleClick} />
</div>
</div>
);
}
在我的子组件中 (SignIn / SignUp)
import React, { useState } from "react";
import "./SignIn.css";
function SignIn(handleClick) {
return (
<div className="sign-in-container">
<form className="sign-form sign-in">
<h2>Sign In</h2>
<label htmlFor="email">
<span>Email Address</span>
<input type="email" name="email" />
</label>
<label htmlFor="password">
<span>Password</span>
<input type="password" name="password" />
</label>
<button className="submit" type="submit">
Sign In
</button>
<p className="panel-switcher" onClick={handleClick()}>
Don't have an account?
</p>
</form>
</div>
);
}
export default SignIn;
解决方案
您快到了,道具作为第一个参数中的对象传递,因此对于SignIn
组件,您可以使用解构,因此更改为:
function SignIn({ handleClick }) {
// code...
// Remove the () from `handleClick()` as that will immediately execute the function.
<p className="panel-switcher" onClick={handleClick}>
}
推荐阅读
- javascript - 如何在reactjs中过滤多数组列表
- python - 将 Python 路径添加到 Jenkins
- python - Python:什么时候需要为模块名称添加前缀?
- css - 当我在and之间添加一个空格时, 这将在 chrome 中进入下一行
- c# - 为 2 个集合中的实体生成所有可能性
- java - Java servlet方法调用序列导致不同的结果
- kotlin - 在 Koin 中提供一个 Instance 作为其接口
- php - 具有超过 1900 个字段的表单,由于 php html 中的查询字符串限制,无法使用 post 方法提交
- c# - 在 Azure 中存储键值对并更改 Azure 函数中的值
- jquery - 如何合并 2 个不同的 jquery 事件函数?