【发布时间】:2020-12-18 03:25:35
【问题描述】:
我在将状态从子级发送到父级时遇到问题。 单击主组件中的菜单后,我想更改状态活动并将此活动发送到边栏组件,因为我想隐藏/显示边栏取决于 css 中的活动类。在 Vanilla JS 中这很容易,但在 React 中我有点困惑。
主要:
import Menu from "./Menu";
import "./Styles.css";
import teamsdb from "./teamsdb";
const Main = ({ name }) => {
return (
<div>
<Menu />
<h1>Main</h1>
<h4>{teamName}</h4>
</div>
);
};
菜单:
const Menu = () => {
const [active, setActive] = useState(false);
const changeMenu = () => {
setActive(!active);
};
return <button onClick={changeMenu}>Menu</button>;
};
export default Menu;
侧边栏:
const Sidebar = () => {
const [searchTerm, setSearchTerm] = React.useState("");
const handleChange = e => {
setSearchTerm(e.target.value);
console.log("Search: ", e.target.value);
};
return (
<div className={active ? 'sidebar active' : 'sidebar'}>
<div className="sidebar__header">
Header
<button>Colors</button>
</div>
<div className="sidebar__search">
<input
type="text"
placeholder="Search"
value={searchTerm}
onChange={handleChange}
/>
</div>
<Teams search={searchTerm} />
</div>
);
};
App.js
import React from "react";
import "./App.css";
import Sidebar from "./components/Sidebar";
import Main from "./components/Main";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
function App() {
return (
<div className="App">
<div className="app__body">
<Router>
<Sidebar />
<Switch>
<Route path="/team/:teamId">
<Main />
</Route>
<Route exact path="/">
<Main />
</Route>
</Switch>
</Router>
</div>
</div>
);
}
【问题讨论】:
-
你在哪里使用
<Sidebar />组件? -
在主文件 App.js.
-
你能把那个文件也分享一下吗?谢谢!
-
好的,我将 App.js 添加到问题中
-
当你希望将状态从子组件传递到父组件时,你应该将状态提升到父组件。您必须维护父组件本身的状态,并添加事件处理程序以更改父组件中的状态。然后您可以将此状态作为道具传递给子组件。这样,它就可以保持状态,并且您的父组件也可以访问该状态。
标签: javascript reactjs