![](/img/trans.png)
[英]How to change the child state component from parent in functional component
[英]Change Parent Component State from Child functional component in React
我創建了一個簽名頁面組件,其中包含登錄組件和注冊組件。 我的問題是如何將 onClick function 從父級傳遞給子級,以便更改父組件的 state(簽名頁面組件)? 我期望的是,通過單擊子組件中的按鈕,可以切換父組件的活動 state,並且可以根據活動的 state 更改樣式。 我正在嘗試將 handleClick function 從父級傳遞給子級,但效果不佳。
有什么解決辦法嗎?
代碼框中的詳細信息: 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;
您快到了,道具在第一個參數中作為 object 傳遞,因此對於SignIn
組件,您可以使用解構,因此更改為:
function SignIn({ handleClick }) {
// code...
// Remove the () from `handleClick()` as that will immediately execute the function.
<p className="panel-switcher" onClick={handleClick}>
}
首先,組件的props
是object類型。
所以,如果你想在 child 中獲取handleClick
,它應該如下所示。
function SignIn({ handleClick }) {
// ...
}
其次,當處理一個 function 給孩子時,它不應該被調用。
例如,如下所示。
<p className="panel-switcher" onClick={handleClick}>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.