javascript - 如何使 NavBar 中的 onClick 事件做出反应?
问题描述
我正在做我的第一个反应项目。我是 JS、HTML、CSS 甚至网络应用程序编程的新手。
我想要做的是在按钮点击时显示一些信息。
我有我的主要默认组件,App.js
. 它看起来像这样:
import React, { Component } from "react";
import Navbar from "./Components/Navbar";
import "./Styles/App.css";
import ProjectsList from "./Components/Projects/ProjectsList";
import axios from "axios";
class App extends Component {
state = {
projects: [], //i get it from api on Didmount();
showProjects: true //hardcoded var to shows projects list
};
componentDidMount() {
//i get projects here from axios and my api, it works ok!
}
render() {
return (
<div>
<Navbar />
{this.state.showProjects && (
<ProjectsList projects={this.state.projects} />
)}
</div>
);
}
}
export default App;
如您所见,我可以ProjectLists
通过硬编码的showprojects
布尔值来操纵我的可见性。它工作正常。假时不可见,真时可见,非常简单。
如何将该showProjects
变量传输到我的Navbar.js
组件并通过单击导航栏项来触发它?
我的Navbar.js
:
import React, { Component } from "react";
import { Navbar } from "react-bootstrap";
class NavBar extends Component {
render() {
return (
<Navbar inverse collapseOnSelect>
<Navbar.Collapse>
<Navbar.Form>
<Navbar.Brand> Projects </Navbar.Brand> //button click here, how to?
</Navbar.Form>
</Navbar.Collapse>
</Navbar>
);
}
}
export default NavBar;
视图如下所示:
我希望可以选择单击Projects
我的导航栏,然后我ShowProjects
将设置为 true 并且项目将可见。怎么做?
感谢您的任何建议!
编辑:
如果有帮助,我的ProjectsList.js
组件:
import React, { Component } from "react";
import Project from "./Project";
import { ListGroup } from "react-bootstrap";
class ProjectsList extends Component {
render() {
return (
<ListGroup>
{this.props.projects.map(project => {
return <Project project={project} key={project.id} />;
})}
</ListGroup>
);
}
}
export default ProjectsList;
解决方案
首先在父组件中创建状态改变函数:
toggleShowProjects = () => {
this.setState(prevState => ({
showProjects: !prevState.showProjects
}))
}
比将函数传递给您的导航栏组件:
import React, { Component } from "react";
import Navbar from "./Components/Navbar";
import "./Styles/App.css";
import ProjectsList from "./Components/Projects/ProjectsList";
import axios from "axios";
class App extends Component {
state = {
projects: [], //i get it from api on Didmount();
showProjects: true //hardcoded var to shows projects list
};
componentDidMount() {
//i get projects here from axios and my api, it works ok!
}
toggleShowProjects = () => {
this.setState(prevState => ({
showProjects: !prevState.showProjects
}))
}
render() {
return (
<div>
<Navbar
toggleProjects={this.toggleShowProjects} />
{this.state.showProjects && (
<ProjectsList
projects={this.state.projects} />
)}
</div>
);
}
}
export default App;
推荐阅读
- reactjs - 如何将 redux 工具包状态作为函数参数传递给另一个函数
- perl - 在 mojolicious 中处理路由权限
- nosql - Oracle NoSQL 数据库云服务是否支持父子表功能?
- postgresql - 如何使用 Slick 创建动态查询?
- javascript - 如何使用反应钩子在 DE 结构对象中设置状态
- graphql - 如何使用 API Platform GraphQL 为必填字段指定默认值?
- adobe - 拖动对象仅水平移动
- kotlin - 无法解析 org.jetbrains:kotlin-css-jvm:1.0.0-pre.31-kotlin-1.2.41
- haskell - 使用折叠将字符串拆分为给定长度的字符串列表
- python - 使用自定义类别从 Pandas 制作饼图